sync.mutex 锁定什么?

What does sync.mutex lock?

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 放入结构中有什么意义?

A Mutex 只保证如果某个东西已经锁定了它,在第一次释放锁之前它不能被其他东西再次锁定。正确使用它取决于您,方法是确保在尝试访问您想要受锁保护的任何内容之前获得锁,就像您在示例 main.

中所做的那样