package main import ( "fmt" "sync" "time" ) func main() { var cond *sync.Cond = sync.NewCond(new(sync.Mutex)) var ready chan bool = make(chan bool, 1) var wg sync.WaitGroup wg.Add(2) // Menambahkan 2 goroutine ke WaitGroup go func() { cond.L.Lock() ready <- true cond.Broadcast() cond.L.Unlock() wg.Done() // Mengurangi jumlah goroutine yang menunggu }() go func() { cond.L.Lock() for len(ready) <= 0 { cond.Wait() } value := <-ready cond.L.Unlock() fmt.Println("TRUE 2", value) wg.Done() // Mengurangi jumlah goroutine yang menunggu }() go func() { cond.L.Lock() for len(ready) <= 0 { cond.Wait() } value := <-ready cond.L.Unlock() fmt.Println("TRUE 1", value) }() wg.Wait() // Menunggu kedua goroutine selesai time.Sleep(time.Second * 1) }