我听说这比你的程序高并发的时候channel要好。sycn.Mutex.Lock()但为什么渠道效率更高呢?在我看来,要实现一个安全的缓冲池(我认为channel可以被认为是一个缓冲池),你必须使用锁。
如果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
}
Run Code Online (Sandbox Code Playgroud)
如果channel到处都比mutex,我为什么要使用 …