github.com/maikovskiys/l1tasks@v0.0.0-20230927052451-6436d7687dc9/develop/dev07/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"sync"
     6  )
     7  
     8  /*
     9  Реализовать конкурентную запись данных в map.
    10  */
    11  func main() {
    12  	wg := sync.WaitGroup{}
    13  	m := &sync.RWMutex{}
    14  	mapa := make(map[int]bool)
    15  	for i := 0; i <= 4; i++ {
    16  		worker := 1 + i
    17  		wg.Add(1)
    18  		go func(*sync.RWMutex, map[int]bool, int) {
    19  			defer wg.Done()
    20  			id := 0
    21  			for {
    22  				fmt.Printf("Worker № %+v recording in map\n", worker)
    23  				m.Lock()
    24  				mapa[id] = true
    25  				m.Unlock()
    26  				id++
    27  				if len(mapa) == 50 {
    28  					return
    29  				}
    30  			}
    31  		}(m, mapa, worker)
    32  	}
    33  	wg.Wait()
    34  	fmt.Println(mapa)
    35  	fmt.Println("main end")
    36  }