Go 所有的戈鲁廷人都睡着了
我编写了一些代码,旨在使用通道进行同步Go 所有的戈鲁廷人都睡着了,go,Go,我编写了一些代码,旨在使用通道进行同步 var counter int64 // shared resource var wg sync.WaitGroup func main() { ch := make(chan int64) wg.Add(2) go incCounter(ch) go incCounter(ch) ch <- counter wg.W
var counter int64 // shared resource
var wg sync.WaitGroup
func main() {
ch := make(chan int64)
wg.Add(2)
go incCounter(ch)
go incCounter(ch)
ch <- counter
wg.Wait()
fmt.Println("Final Counter:", counter) // expected value is 4
}
func incCounter(ch chan int64) {
defer wg.Done()
for count := 0; count < 2; count++ {
value := <-ch
value++
counter = value
ch <- counter
}
}
var计数器int64//共享资源
var wg sync.WaitGroup
func main(){
ch:=制造(chan int64)
工作组.添加(2)
进入柜台(ch)
进入柜台(ch)
通道通道make(chan int)
的隐式大小为零(参考:)
大小为零的通道是无缓冲的。具有指定大小make(chan int,n)的通道是缓冲的。有关缓冲通道与无缓冲通道的讨论,请参阅。处的示例说明了差异
这里,通道通道make(chan int)
的隐式大小为零(参考:)
大小为零的通道是无缓冲的。具有指定大小make(chan int,n)的通道是缓冲的。有关缓冲通道与无缓冲通道的讨论,请参阅。处的示例说明了差异
这里,频道<代码>哪里是<代码> WG>代码>?哦,对不起,我忘记了.<代码> WG >代码>同步.WaistGue。@ AkhilThayyilIf,你这样做是为了学习,但这很好,但作为替代,你可能想考虑一个原子计数器来达到这个目的,例子可以在这里找到,谢谢。我会试试看。@McNigoLoad是<代码> WG声明?哦,对不起,我忘记了。<代码> WG的类型是“代码> Sun.WaTyGue。@ AkhilThayyilIf,您这样做是为了学习,但这很好,但作为替代方案,您可能想考虑一个原子计数器用于此目的,示例可以在这里找到,谢谢。我会试试看。”
var counter int64 // shared resource
var wg sync.WaitGroup
func main() {
ch := make(chan int64, 1)
wg.Add(2)
go incCounter(ch)
go incCounter(ch)
ch <- counter
wg.Wait()
fmt.Println("Final Counter:", counter) // expected value is 4
}
func incCounter(ch chan int64) {
defer wg.Done()
for count := 0; count < 2; count++ {
value := <-ch
value++
counter = value
ch <- counter
}
}
var counter int64 // shared resource
var wg sync.WaitGroup
func main() {
ch := make(chan int64)
wg.Add(2)
go incCounter(ch)
go incCounter(ch)
ch <- counter
// to ensure one go routine 'incCounter' is completed and one go routine is blocked for unbuffered channel
time.Sleep(3*time.Second)
<-ch // to unblock the last go routine
wg.Wait()
fmt.Println("Final Counter:", counter) // expected value is 4
}
func incCounter(ch chan int64) {
defer wg.Done()
for count := 0; count < 2; count++ {
value := <-ch
value++
counter = value
ch <- counter
}
}