在另一个线程中解锁共享互斥锁

时间:2020-02-27 20:58:11

标签: c++

我正在尝试将shared_mutex的unique_lock移到另一个线程以实现我的设计目标。

请参见下面的示例代码。如果我将std :: shared_mutex替换为std :: 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实现我的设计目标。但这似乎不起作用。如果您还有其他想法,请告诉我。谢谢。

0 个答案:

没有答案