sync.mutex锁定什么?

问题描述 投票:-2回答:1
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放入结构有什么意义?

go concurrency synchronization locking mutex
1个回答
2
投票

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

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