同步/ mutex.go中的“_ = variable”是什么意思

问题描述 投票:9回答:2

同步/ mutex.go:

func (m *Mutex) Unlock() {
    if race.Enabled {
         _ = m.state
         race.Release(unsafe.Pointer(m))
     }
...

什么是_ = m.state的意思?

我知道var _ interface = Object意味着检查Object是否实现了接口。

go underline
2个回答
1
投票

从提交日志中,原因是“_ = m.state”确保m不是nil。

commit 5bb3a66a973ea87494b9197091e8c1f122080627
Author: Rémy Oudompheng <[email protected]>
Date:   Mon Apr 8 23:46:54 2013 +0200

    sync, sync/atomic: do not corrupt race detector after a nil dereference.

    The race detector uses a global lock to analyze atomic
    operations. A panic in the middle of the code leaves the
    lock acquired.

    Similarly, the sync package may leave the race detectro
    inconsistent when methods are called on nil pointers.

    R=golang-dev, r, minux.ma, dvyukov, rsc, adg
    CC=golang-dev
    https://golang.org/cl/7981043

0
投票

强制读取m.state并勾选竞赛检测器。

© www.soinside.com 2019 - 2024. All rights reserved.