小编jia*_*hao的帖子

Golang 中的通道和互斥体有什么区别?

我听说这比你的程序高并发的时候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,我为什么要使用 …

multithreading channel go

0
推荐指数
1
解决办法
4273
查看次数

标签 统计

channel ×1

go ×1

multithreading ×1