c++ - 在函数体中静态定义的互斥锁是否能够正确锁定?
问题描述
在函数体中静态定义的互斥锁是否能够正确锁定?我目前在我的记录器系统中使用这种模式,但我还没有测试它的线程安全性。
void foo () {
static std::mutex mu;
std::lock_guard<std::mutex> guard(mu);
...
}
解决方案
是的,这很好。第一次调用该函数时mu
将被初始化(这保证是线程安全的并且只发生一次),然后guard
将其锁定。如果另一个线程调用 foo 它将等待
std::lock_guard<std::mutex> guard(mu);
直到第一次调用foo
完成并被guard
销毁解锁mu
。
推荐阅读
- google-apps-script - 将谷歌应用脚本文本按钮更改为填充样式
- ios - SwiftUI onDrag 修饰符从一开始就延迟了 UILongPressGestureRecognizer
- python - 从多个页面抓取表格的功能
- ios - 在 SwiftUI 中导入文件后,如何将导入的文件名保存为字符串?
- node.js - GCP 上的微服务
- reactjs - 获取功能组件 React 中实例的引用
- php - 如何解决 PHP 错误:exec() 无法分叉
- android - kivy 和 buildozer 中的 firebase_admin
- swift - 您应该直接从 swift 应用程序查询 AWS dynamoDB,还是使用反向代理服务器并重定向到数据库更好?
- python - SARIMAX 和 White 测试