交替打印
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func main() {
var ch = make(chan int, 0)
wg.Add(1)
go func() {
defer wg.Done()
for {
var a, ok = <-ch
if !ok {
return
}
fmt.Println("A协程", a)
a += 1
if a == 101 {
close(ch)
return
}
ch <- a
}
}()
wg.Add(1)
go func() {
ch <- 1
defer wg.Done()
for {
var a, ok = <-ch
if !ok {
return
}
fmt.Println("B协程", a)
a += 1
if a == 101 {
close(ch)
break
}
ch <- a
}
}()
wg.Wait()
}
package main
import (
"fmt"
"sync"
)
func main() {
var (
a = make(chan struct{}, 1)
wg sync.WaitGroup
)
a <- struct{}{}
wg.Add(1)
go func() {
defer wg.Done()
for i := 1; i <= 100; i++ {
_, ok := <-a
if !ok {
return
}
if i&1 == 0 {
fmt.Println(i)
}
if i >= 100 {
close(a)
return
}
a <- struct{}{}
}
}()
wg.Add(1)
go func() {
defer wg.Done()
for i := 1; i <= 100; i++ {
_, ok := <-a
if !ok {
return
}
if i&1 == 1 {
fmt.Println(i)
}
a <- struct{}{}
}
}()
wg.Wait()
}
最后更新于
这有帮助吗?