github.com/maikovskiys/l1tasks@v0.0.0-20230927052451-6436d7687dc9/develop/dev18/main.go (about) 1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 ) 8 9 /* 10 Реализовать структуру-счетчик, которая будет инкрементироваться в конкурентной среде. 11 По завершению программа должна выводить итоговое значение счетчика. 12 */ 13 const timeout = time.Second * 2 14 15 func main() { 16 ctx, cancel := context.WithTimeout(context.Background(), timeout) 17 counter := Counter{ 18 value: 0, 19 } 20 go func(context.Context, Counter) { 21 22 for { 23 select { 24 case <-ctx.Done(): 25 return 26 default: 27 counter.value++ 28 } 29 } 30 }(ctx, counter) 31 <-ctx.Done() 32 cancel() 33 fmt.Println(counter) 34 } 35 36 type Counter struct { 37 value int 38 }