我听说这channel比sycn.Mutex.Lock()您的程序具有高并发性时要好。但是为什么渠道更有效率呢?在我看来,要实现一个安全的缓冲池(我认为通道可以被认为是一个缓冲池),你必须使用锁。
如果channel效率更高,为什么会有sycn.Mutex?因为我可以编写下面的代码来模拟sync.Mutex.
type seme struct {
lock chan int
locked bool
}
func (l *seme)Lock() {
// state 0 for initial, 1 for locked, 2 for free.
if atomic.CompareAndSwapInt32(&l.state, 0, 1) {
l.lock = make(chan int, 1)
}
l.lock <- 0
l.state = 1
}
func (l *seme)UnLock() {
if !atomic.CompareAndSwapInt32(&l.state, 1, 2) {
panic("UnLock a free Lock")
}
l.state = 2
<- l.lock
}
如果channel到处都比mutex,我为什么要使用mutex?也就是说,我应该什么时候使用mutex而不是channel?有人可以给我一个例子吗?
catspeake
呼唤远方
相关分类