std::shared_lock<Mutex>::shared_lock_C++中文网

C++ 参考手册

位置:首页 > C++ 参考手册 >线程支持库 >std::shared_lock > std::shared_lock<Mutex>::shared_lock

构造 shared_lock ,可选地锁定提供的互斥。

1) 构造 shared_lock ,不关联互斥。
2) 移动构造函数。以 other 的内容初始化 shared_lock 。令 other 不关联到互斥。
3-8) 构造 shared_lock ,以 m 为关联的互斥。另外:
3) 通过调用 m.lock_shared() ,以共享模式锁定关联的互斥。若此线程已以任何模式占有互斥则行为未定义。
4) 不锁定关联的互斥。
5) 尝试通过调用 m.try_lock_shared() ,以共享模式锁定关联的互斥而不阻塞。若此线程已以任何模式占有互斥则行为未定义。
6) 假设调用方线程已以共享模式占有 m 。
7) 尝试通过调用 m.try_lock_shared_until(timeout_duration) ,以共享模式锁定关联的互斥,这会阻塞直到经过指定的 timeout_duration 或取得锁,两者的先到来者。可能锁定长于 timeout_duration 。若此线程已以任何模式占有互斥则行为未定义。
8) 尝试通过调用 m.try_lock_shared_for(timeout_time) ,以共享模式锁定关联的互斥,这会阻塞直到抵达指定的 timeout_time 或取得锁,两者的先到来者。可能锁定长于到抵达 timeout_time 为止。若此线程已以任何模式占有互斥则行为未定义。

参数

示例

#include <shared_mutex>
#include <iostream>
#include <thread>
#include <chrono>
 
std::shared_timed_mutex m;
int i = 10;
 
void read()
{
   // 两个线程都获得对整数 i 的访问
   std::shared_lock<std::shared_timed_mutex> slk(m);
   std::cout << "read i as " << i << "...\n"; // 此不同步
   std::this_thread::sleep_for(std::chrono::milliseconds(10));
   std::cout << "woke up...\n";
}
 
int main()
{
   std::thread r1(read);
   std::thread r2(read);
 
   r1.join();
   r2.join();
   return 0;
}