1 Star 1 Fork 1

庄泽锋/go-oneday

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
CyclicBarrier.go 940 Bytes
一键复制 编辑 原始数据 按行查看 历史
庄泽锋 提交于 2018-05-25 17:53 . init
package main
import (
"fmt"
"time"
"oneday/atomic"
)
type CyclicBarrier struct {
ch chan interface{}
number atomic.Volatile
}
func NewCyclicBarrier(number uint) *CyclicBarrier {
c := &CyclicBarrier{
ch: make(chan interface{}, number),
number: atomic.NewVolatile(number),
}
//c.ch <- number
c.number = atomic.NewVolatile(number)
return c
}
func (c *CyclicBarrier) await() {
c.ch <- true
for len(c.ch) < cap(c.ch) {
}
}
func main() {
c := NewCyclicBarrier(4)
go func() { fmt.Println("executing mission 1"); c.await(); fmt.Println("continue executing mission 1") }()
go func() { fmt.Println("executing mission 2"); c.await(); fmt.Println("continue executing mission 2") }()
go func() { fmt.Println("executing mission 3"); c.await(); fmt.Println("continue executing mission 3") }()
go func() { fmt.Println("executing mission 4"); c.await(); fmt.Println("continue executing mission 4") }()
time.Sleep(300e9)
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/1995zzf/go-oneday.git
git@gitee.com:1995zzf/go-oneday.git
1995zzf
go-oneday
go-oneday
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385