名前空間
変種
操作

std::shared_lock<Mutex>::shared_lock

提供: cppreference.com
< cpp‎ | thread‎ | shared lock
 
 
スレッドサポートライブラリ
スレッド
(C++11)
(C++20)
(C++20)
this_thread 名前空間
(C++11)
(C++11)
(C++11)
相互排他
(C++11)
汎用ロック管理
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
条件変数
(C++11)
セマフォ
ラッチとバリア
(C++20)
(C++20)
フューチャー
(C++11)
(C++11)
(C++11)
(C++11)
 
 
shared_lock() noexcept;
(1) (C++14以上)
shared_lock( shared_lock&& other ) noexcept;
(2) (C++14以上)
explicit shared_lock( mutex_type& m );
(3) (C++14以上)
shared_lock( mutex_type& m, std::defer_lock_t t ) noexcept;
(4) (C++14以上)
shared_lock( mutex_type& m, std::try_to_lock_t t );
(5) (C++14以上)
shared_lock( mutex_type& m, std::adopt_lock_t t );
(6) (C++14以上)
template< class Rep, class Period >

shared_lock( mutex_type& m,

             const std::chrono::duration<Rep,Period>& timeout_duration );
(7) (C++14以上)
template< class Clock, class Duration >

shared_lock( mutex_type& m,

             const std::chrono::time_point<Clock,Duration>& timeout_time );
(8) (C++14以上)

shared_lock を構築し、オプションで指定されたミューテックスをロックします。

1) 紐付けられるミューテックスのない shared_lock を構築します。
2) ムーブコンストラクタ。 other の内容を持つ shared_lock を初期化します。 other は紐付けられているミューテックスのない状態になります。
3-8) 紐付けられるミューテックスとして m を持つ shared_lock を構築します。 さらに、
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 に達するまでにより長くブロックする可能性があります。 このスレッドがそのミューテックスをいずれかのモードですでに所有している場合、動作は未定義です。

[編集] 引数

other - 状態を初期化するための別の shared_lock
m - ロックと紐付けるミューテックス
t - 異なるロック戦略を持つコンストラクを選択するために使用するタグ引数
timeout_duration - ブロックする最大時間
timeout_time - ブロックする最大時点

[編集]

#include <shared_mutex>
#include <iostream>
#include <thread>
#include <chrono>
 
std::shared_timed_mutex m;
int i = 10;
 
void read()
{
   // both the threads get access to the integer i
   std::shared_lock<std::shared_timed_mutex> slk(m);
   std::cout << "read i as " << i << "...\n"; // this is not synchronized
   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;
}