在 Go 中有一个缓冲通道的概念。那是一个在你填满它的缓冲区之前不会被阻塞的通道。通用缓冲锁定是否有任何通用模式?它将为有限数量的客户锁定一些资源。
1 回答
湖上湖
TA贡献2003条经验 获得超2个赞
为有限数量的客户端锁定某些资源的原语称为信号量。
它很容易通过缓冲通道实现:
var semaphore = make(chan struct{}, 4) // allow four concurrent users
func f() {
// Grab the lock. Blocks as long as 4 other invocations of f are still running.
semaphore <- struct{}{}
// Release the lock once we're done.
defer func() { <-semaphore }()
// Do work...
}
- 1 回答
- 0 关注
- 99 浏览
添加回答
举报
0/150
提交
取消