首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mutex.Lock和延迟的mutex.Unock命令

mutex.Lock和延迟的mutex.Unock命令
EN

Stack Overflow用户
提问于 2017-11-22 05:08:45
回答 3查看 1.3K关注 0票数 0

在金刚,sync.Mutex锁和解锁是高卢操作,但是锁和延迟解锁的正确顺序是什么?

代码语言:javascript
复制
mu.Lock()
defer mu.Unlock()

代码语言:javascript
复制
defer mu.Unlock()
mu.Lock()

哪一个是最好的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-22 05:10:37

无所谓。

无论哪种方式,defer都会导致在当前作用域退出时执行mu.Unlock() (例如,返回函数)。

第一种方法更可取,因为它有一个更自然的排序(锁,然后解锁)的人的可读性。

票数 6
EN

Stack Overflow用户

发布于 2017-11-22 06:52:15

我看到第一个变体更自然,更容易读懂。您可能会看到,当一个锁被获取时,在它准备释放的同一代码段中:

代码语言:javascript
复制
mu.Lock()
defer mu.Unlock()

无论如何,延迟的函数调用将在稍后执行--在函数退出时。

票数 2
EN

Stack Overflow用户

发布于 2017-11-22 09:10:30

延时

延迟语句延迟函数的执行,直到周围的函数返回为止。 延迟调用的参数将立即计算,但函数调用在周围函数返回之前不会执行。

这两个变体是相同的,因为放置在哪里的defer红色函数并不重要,它将在周围函数返回后执行。

注意到,如果您有几个defer红色函数,那么它将按照defer声明的顺序反转执行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47427211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档