Go 的缓冲通道本质上是一个线程安全的 FIFO 队列。(参见Is it possible to use Go's buffered channel as a thread-safe queue?)
我想知道它是如何实现的。它是否像Is there a 这样的事情,例如用于多个读取或写入线程的无锁队列中描述的那样无锁??
Go 的 src 目录 ( ) 中的 grepinggrep -r Lock .|grep chan
给出以下输出:
./pkg/runtime/chan.c: Lock;
./pkg/runtime/chan_test.go: m.Lock()
./pkg/runtime/chan_test.go: m.Lock() // wait
./pkg/sync/cond.go: L Locker // held while observing or changing the condition
不过,不要锁定我的机器(MacOS,intel x86_64)。是否有任何官方资源来验证这一点?