go - 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
放入结构有什么意义?
解决方案
AMutex
只保证如果有东西锁定了它,在第一次释放锁之前,它不能被其他东西再次锁定。正如您在示例中所做的那样,通过确保在尝试访问您想要受锁保护的任何内容之前获得锁,您可以正确使用它main
。
推荐阅读
- react-native - 在本机反应中减少长按 TouchableHighlight 的持续时间
- ldap - 在设置 LDAP 与 ActiveMQ 集成时遇到问题(在 centos7 上)管理页面
- sql-server - T-SQL - 选择表中的条件属性
- javascript - 如何在内容丰富的 Gatsby 中包含轮播组件?
- python - 在等高线图 PYTHON 上绘制点
- angular - 在 Ionic V4 应用程序中显示网页 - 不一致
- javascript - Nodejs和zip存档中的更新文件
- javascript - created() 完成后是否可以运行 v-for ?
- python - 在python中将动态日志文件名传递给log4j.properties
- sql-server - 在 SSRS 中,从参数值动态插入目录表(报告服务器数据库)中的名称列