go - sync.mutex 锁定什么?

标签 go concurrency synchronization locking mutex

这个问题在这里已经有了答案:





How does a mutex.Lock() know which variables to lock?

(1 个回答)


2年前关闭。




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.*那么放一个 sync.Mutex 有什么意义呢?进入结构?

最佳答案

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

关于go - sync.mutex 锁定什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61663380/

相关文章:

websocket - 在 Go 中提供 websocket

docker - 运行时错误 : concurrent poll() invocation using celery

go - 在写入文件之前检查重复项的方法?

去正则表达式 : match three asterisks

java - 在java中,有没有办法在线程进入等待状态而不是完成时将其设为 "Join"?

c - 互斥量是否保证可见性 (GLib)?

java - ReentrantLock 在同一个线程中被神秘地解锁,即使没有其他线程正在访问它

android - 使用 picasso 加载时图像未保存到存储中

ios - iCloud + 核心数据 : First import and user's feeling of loss of data

go - 并发 goroutine 尝试访问数据库时避免 SQLite 文件/数据库锁定的预防措施?