就下面的这段代码
var a int
var mu sync.Mutex
func testMu(){
mu.Lock()
a = 10
mu.Unlock()
}
这个变量 a 能被锁住吗(个人测试的时候是没锁住的)
1
bandian OP 突然想明白了其中的原理,因为互斥锁的原理,同一时刻 mu 这个互斥锁最多尽可被一个线程获取,所以当线程 a 已经拿到了这个互斥锁,那线程 b 在获取 mu 这个互斥锁的时候就会被阻塞住,表现出来其实就是线程 b 中从 Lock() 到 Unlock() 之间的所有代码都被“锁”住了
但其实如果你在线程 b 中不去调用 mu 的 Lock() 方法,而是直接修改变量 a 的值是可以修改成功的 |
2
pipilu 2022-03-22 11:29:52 +08:00
可以修改成功但是 a 线程不可见吗?
为什么 go 不用 channel 解决线程同步问题 |