synchronization - Java synchronized() block 的 golang 等价物是什么?

标签 synchronization go

Java 为同步代码的关键部分提供了一种非常方便的习惯用法:

synchronized(someObject) {
    // do something really important all by myself with nobody bothering me
}

或者

public synchronized void doSomething() {
    // ...
}

什么是 go 等价物?

(快速搜索显示:golang.org/pkg/sync/ - 这似乎(也许我错了)对于一般用途来说有点太低了。)

(我关心这个的例子:我需要通过 channel 向多个监听器发送消息。 channel 为数据提供了一个很好的管道,而无需同步任何东西,但是当添加或删除 channel 时,我需要修改 channel 列表,随时可能发生,必须能够处理并发。)

最佳答案

sync.Mutex是互斥锁,它可以提供类似于 synchronized java 关键字的功能(除了 java 中的锁提供 reentrant 互斥):

synchronized(someObject) {
    //   
}

相当于:

var l sync.Mutex

l.Lock()
//
l.Unlock()

关于synchronization - Java synchronized() block 的 golang 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18880575/

相关文章:

戈朗 : convert IPv4 and IPv6 addresses from text to binary form

go - 为什么我从我的 io.PipeReader 中得到一个 EOF?

synchronization - 通过 WiFi 将同步媒体流式传输到多个设备

go - 检测失败的结构字段 - govalidator

c# - 如何让线程休眠直到收到异步函数的回调?

objective-c - 在 Objective-C 中 @synchronized 如何锁定/解锁?

go - 数组上限被覆盖

go - 如何使用 golang 内置的 Untar (golang.org/x/build/internal/untar)

algorithm - 为翻译字幕添加静音的机器学习方法

java - 同步块(synchronized block)内的 yield ?调用 yield() 后释放锁?