|
ကျွန်တော်တို့က channel တွေကို goroutine တွေကြား execution ကို synchronize (ချိန်ကိုက်) လုပ်ဖို့ သုံးနိုင်ပါတယ်။ ဒီဥပမာမှာ goroutine တစ်ခု ပြီးဆုံးတာကို စောင့်ဆိုင်းဖို့ blocking receive ကို သုံးပြထားပါတယ်။ Goroutine အများကြီး ပြီးဆုံးတာကို စောင့်မယ်ဆိုရင်တော့ WaitGroup သုံးတာက ပိုသင့်တော်နိုင်ပါတယ်။ |
|
![]()
package main |
|
import ( "fmt" "time" ) |
|
|
ဒါက goroutine အနေနဲ့ run မယ့် function ပါ။ |
func worker(done chan bool) { fmt.Print("working...") time.Sleep(time.Second) fmt.Println("done") |
|
အလုပ်ပြီးပြီဆိုတာ အသိပေးဖို့ value တခု ပို့လိုက်ပါတယ်။ |
done <- true
}
|
func main() { |
|
|
Worker goroutine တစ်ခု စတင်ပါတယ်၊ သူ့ကို အသိပေး (notify) ဖို့ channel ကိုလည်း ပေးလိုက်ပါတယ်။ |
done := make(chan bool, 1)
go worker(done)
|
|
Worker က channel ပေါ်မှာ အသိပေး (nofity) တဲ့အထိ block လုပ်ထားပါတယ်။ |
<-done
}
|
$ go run channel-synchronization.go working...done |
|
|
ဒီပရိုဂရမ်ထဲက |
နောက်ဥပမာ: Channel Directions.