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  }