GO 利用 sync 库实现 Barrier
来源:互联网 发布:指纹解锁软件 编辑:程序博客网 时间:2024/06/01 10:03
GO Barrier
Barrier 用于多个线程完成状态的同步。在linux的系统库中有相关的实现,在 pthread.h 中有函数声明。在golang的标准库中还没有相关的实现。下面利用sync标准库实现个简单的barrier。
实现
----------$GOPATH/src/barrier/barrier.go-----------package barrierimport ( "sync")type Barrier struct { curCnt int maxCnt int cond *sync.Cond}func NewBarrier(maxCnt int) *Barrier { mutex := new(sync.Mutex) cond := sync.NewCond(mutex) return &Barrier{curCnt: maxCnt, maxCnt: maxCnt, cond: cond}}func (barrier *Barrier) BarrierWait() { barrier.cond.L.Lock() if barrier.curCnt--; barrier.curCnt > 0 { barrier.cond.Wait() } else { barrier.cond.Broadcast() barrier.curCnt = barrier.maxCnt } barrier.cond.L.Unlock()}
测试
package mainimport ( "fmt" "sync" "barrier")func main() { fmt.Println("Hello World!") barrier := barrier.NewBarrier(3) var wg sync.WaitGroup for i := 0; i < 3; i++ { wg.Add(1) go func() { defer wg.Done() fmt.Println("A") barrier.BarrierWait() fmt.Println("B") barrier.BarrierWait() fmt.Println("C") }() } wg.Wait()}
0 0
- GO 利用 sync 库实现 Barrier
- Go并发:利用sync.WaitGroup实现协程同步
- Go并发:利用sync.Once延迟加载
- go语言sync.WaitGroup
- zookeeper实现Barrier
- C# Barrier 实现
- 我是如何利用GO实现Session技术
- Barrier
- go语言的官方包sync.Pool的实现原理和适用场景
- go语言:sync.Once的用法
- GO中的sync.waitgroup的用法
- go的临时对象池--sync.Pool
- go sync的并发同步简单用法
- Go 1.9 sync Map 源码阅读笔记
- Linux Barrier I/O实现分析笔记
- barrier and rwlock实现POSIX源码
- go利用x/net/html包实现的蜘蛛
- 实现 Lip-sync
- java中的foreach用法
- HTTPURLConnection中接收数据流
- java静态块 非静态块 构造方法顺序
- BAT解密:互联网技术发展之路(7)- 网络层技术剖析
- Android动画之属性动画(Property Animation)(三)
- GO 利用 sync 库实现 Barrier
- 捕获全局异常并重启程序
- 如何寻找安全漏洞之——黑客们如何挖掘漏洞
- Auto-tuning: Shutting Down Background Process GTX [ID 1481153.1]
- LogUtils:一个强大的Android日志管理器,支持对象、List、Map、数组等输出
- 关于LayoutInflater 的inflate方法参数的含义
- each() 和 list() 结合使用来遍历数组
- 日常积累
- 黑客术语大全及其解释