c++ - 在另一个线程中解锁共享互斥锁
问题描述
我正在尝试将 shared_mutex 的 unique_lock 移动到另一个线程以实现我的设计目标。
请参阅下面的示例代码。如果我用 std::mutex 替换 std::shared_mutex 代码有效
using namespace std;
shared_mutex shared_mutex_;
{
unique_lock<shared_mutex> lock_{shared_mutex_};
thread t{[](unique_lock<shared_mutex> &&lock) { lock.unlock(); },
move(lock_)};
t.join();
}
if (shared_mutex_.try_lock()) { // False
cout << "Lock shared_mutex_ successful\n";
shared_mutex_.unlock();
}
我的设计目标是:
- 如果可以获得唯一锁,则调用函数应启动工作线程。
- 工作线程对所有资源具有唯一的访问权限。当一个工作线程正在运行时,不能启动其他工作线程。
- std::future 将用于检查工作是否完成。
- 如果工作人员未运行,则资源应具有共享访问权限。
我正在尝试使用 std::shared_mutex 或 std::shared_timed_mutex 来实现我的设计目标。但这似乎不起作用。如果您有其他想法,请告诉我。谢谢。
解决方案
推荐阅读
- email - CRM?是这个名字吗?
- python - 如何将多个文本文件加载到 Google 文本转语音中?
- android - POS蓝牙打印机在启动时留下一些边距,然后在Android App中开始打印
- javascript - new Date().getTime() 在 JavaScript 中显示 NaN
- python - 在滚动视图中按下按钮以切换到另一个屏幕 [Kivy]
- react-native - 世博会弹出后反应本机问题
- sql - 查询以使用 like 运算符连接两个表
- google-chrome-extension - 替换页面上的文本值或显示与网站上显示的 id 匹配的值的叠加层
- python - RandomizedSearchCV Pipeline 使用mutual_info_classif 选择SelectPercentile 的超参数
- c# - 如何使用 Android 的统一从 URL 加载 JSON?