sync.mutex锁定什么?[重复]

问题描述 投票:-1回答: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.