package main
import (
"fmt"
"sync"
)
const numWorkers = 2
var sharedCounter int
var counterMutex sync.Mutex
func worker(id int, start chan bool, done *sync.WaitGroup) {
defer done.Done()
<-start
counterMutex.Lock()
sharedCounter++
localCount := sharedCounter
counterMutex.Unlock()
fmt.Printf("Worker %d incremented counter to %d\n", id, localCount)
}
func main() {
fmt.Printf("Starting %d workers\n", numWorkers)
startChan := make(chan bool, numWorkers)
var wg sync.WaitGroup
for i := 0; i < numWorkers; i++ {
wg.Add(1)
go worker(i, startChan, &wg)
}
for i := 0; i < numWorkers; i++ {
startChan <- true
}
wg.Wait()
fmt.Printf("Final counter value: %d\n", sharedCounter)
}