,sync.Mutex Lock和Unlock是usul操作,但是Lock和defer Unlock的正确顺序是什么?
mu.Lock()
defer mu.Unlock()
或
defer mu.Unlock()
mu.Lock()
哪个最好?
答案 0 :(得分:5)
没关系。
无论哪种方式,defer
都会导致mu.Unlock()
在退出当前范围时执行(例如,返回的函数)。
第一种方法更为可取,因为它具有更自然的排序(锁定,然后解锁)以供人类阅读。
答案 1 :(得分:2)
我看到第一个变体更自然,更易读。您可能会看到锁被获取并且在相同的代码片段中它准备好释放:
mu.Lock()
defer mu.Unlock()
无论如何,延迟函数调用将在稍后执行 - 在函数退出时执行。
答案 2 :(得分:0)
延迟语句推迟执行函数,直到周围的函数返回。
立即计算延迟调用的参数,但在周围函数返回之前不会执行函数调用。
两个变体都是相同的,因为放置defer
红色函数无关紧要,它将在周围函数返回后执行。
注意如果您有多个defer
红色函数,它将按照defer
声明的顺序以相反的顺序执行。