【问题标题】:What does sync.mutex lock? [duplicate]sync.mutex 锁定什么? [复制]
【发布时间】:2020-05-07 16:53:02
【问题描述】:
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.Lock 锁定互斥体,仅此而已。您可以正确使用它来同步访问。

标签: go concurrency synchronization locking mutex


【解决方案1】:

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

【讨论】:

  • 谢谢,这个解释简明扼要。
猜你喜欢
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多