sync.Mutex如何在并发Golang程序中工作

时间:2016-07-11 03:25:38

标签: multithreading go mutex goroutine

Go中使用并发程序时,我们使用var mutex sync.Mutex然后如果我们必须编写执行某些同步代码块,我们会调用mutex.Lock()mutex.Unlock()。现在我有一些疑问:

1)是否只有mutex的一个实例,即如果mutex用于锁定CodeBlockA的操作,同时其他一些goroutine B必须使用它其他一些也使用mutex的CodeBlockB会被goroutine B阻止,直到goroutine A解除mutex

2)我们是否有可能拥有更多的静音实例来保护他们自己的专用代码块。

1 个答案:

答案 0 :(得分:0)

在编写示例代码作为参考时,我得到了答案。如果我们有def Pace(): ser.write(struct.pack('!BB',var1,var2) ,则var mu sync.Mutex的锁定和解锁将被序列化。它不能同时锁定在两个可能完全独立的代码库的地方。但如果我们有muvar mu1 sync.Mutex,则可以同时锁定var mu2 sync.Mutexmu1。以下是POC的一个小程序:

mu2

运行后,

输入代码2

输入代码1

退出代码2

退出代码1

真正的0m1.335s

用户0m0.307s

sys 0m0.069s