This question already has an answer here:
How does a mutex.Lock() know which variables to lock?

(1个答案)


5个月前关闭。




package main

import (
    "sync"
)

type B struct {
    balance int32
    m *sync.RWMutex
}

var (
    a = 100

    b = &B {
        balance:1000,
        m:&sync.RWMutex{},
    }
)

func main()  {
    b.m.Lock()
    a--
    b.balance--
    b.m.Unlock()
}

像上面的示例一样,b.m锁定什么?只是b? b和a?还是锁不锁定对象而是关键部分?

如果b.m锁定了关键部分而不是b.*,那么将sync.Mutex放入结构的意义何在?

最佳答案

Mutex仅保证如果某事物已将其锁定,则在首次释放该锁定之前,它无法再被其他事物再次锁定。如您在示例main中所做的那样,您可以通过确保在尝试访问要由该锁保护的任何内容之前获得一个锁来正确使用它。

09-04 08:13
查看更多