首页 > 解决方案 > sync.mutex 锁定什么?

问题描述

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.m锁定关键部分而不是b.*那么将 async.Mutex放入结构有什么意义?

标签: goconcurrencysynchronizationlockingmutex

解决方案


AMutex只保证如果有东西锁定了它,在第一次释放锁之前,它不能被其他东西再次锁定。正如您在示例中所做的那样,通过确保在尝试访问您想要受锁保护的任何内容之前获得锁,您可以正确使用它main


推荐阅读