在金刚,sync.Mutex锁和解锁是高卢操作,但是锁和延迟解锁的正确顺序是什么?
mu.Lock()
defer mu.Unlock()或
defer mu.Unlock()
mu.Lock()哪一个是最好的?
发布于 2017-11-22 05:10:37
无所谓。
无论哪种方式,defer都会导致在当前作用域退出时执行mu.Unlock() (例如,返回函数)。
第一种方法更可取,因为它有一个更自然的排序(锁,然后解锁)的人的可读性。
发布于 2017-11-22 06:52:15
我看到第一个变体更自然,更容易读懂。您可能会看到,当一个锁被获取时,在它准备释放的同一代码段中:
mu.Lock()
defer mu.Unlock()无论如何,延迟的函数调用将在稍后执行--在函数退出时。
发布于 2017-11-22 09:10:30
延时
延迟语句延迟函数的执行,直到周围的函数返回为止。 延迟调用的参数将立即计算,但函数调用在周围函数返回之前不会执行。
这两个变体是相同的,因为放置在哪里的defer红色函数并不重要,它将在周围函数返回后执行。
注意到,如果您有几个defer红色函数,那么它将按照defer声明的顺序反转执行。
https://stackoverflow.com/questions/47427211
复制相似问题