std::recursive_timed_mutex:: lock
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Locking | ||||
|
recursive_timed_mutex::lock
|
||||
| Native handle | ||||
|
void
lock
(
)
;
|
(C++11以降) | |
ミューテックスをロックします。他のスレッドが既にミューテックスをロックしている場合、
lock
の呼び出しはロックが取得できるまで実行をブロックします。
スレッドは再帰ミューテックスに対して
lock
を繰り返し呼び出すことができます。所有権は、スレッドが対応する回数だけ
unlock
を呼び出した後にのみ解放されます。
所有権の最大レベル数は未規定です。この数を超えた場合、 std::system_error 型の例外がスローされます。
同じミューテックスに対する以前の unlock() 操作は、この操作と synchronize-with ( std::memory_order で定義されている通り)関係を持ちます。
目次 |
例外
エラーが発生した場合、
std::system_error
をスローします。これには、基盤となるオペレーティングシステムからのエラーも含まれ、
lock
がその仕様を満たすことを妨げる場合があります。例外がスローされた場合、ミューテックスはロックされません。
注記
lock()
は通常直接呼び出されません:
std::unique_lock
、
std::scoped_lock
、および
std::lock_guard
が排他ロックの管理に使用されます。
例
この例は、
lock
と
unlock
を使用して共有データを保護する方法を示しています。
#include <chrono> #include <iostream> #include <mutex> #include <thread> int g_num = 0; // protected by g_num_mutex std::mutex g_num_mutex; void slow_increment(int id) { for (int i = 0; i < 3; ++i) { g_num_mutex.lock(); ++g_num; // note, that the mutex also syncronizes the output std::cout << "id: " << id << ", g_num: " << g_num << '\n'; g_num_mutex.unlock(); std::this_thread::sleep_for(std::chrono::milliseconds(234)); } } int main() { std::thread t1{slow_increment, 0}; std::thread t2{slow_increment, 1}; t1.join(); t2.join(); }
出力例:
id: 0, g_num: 1 id: 1, g_num: 2 id: 1, g_num: 3 id: 0, g_num: 4 id: 0, g_num: 5 id: 1, g_num: 6
関連項目
|
ミューテックスのロックを試み、利用できない場合は戻る
(公開メンバ関数) |
|
|
ミューテックスのロックを試み、指定されたタイムアウト時間
ミューテックスが利用できない場合に戻る (公開メンバ関数) |
|
|
ミューテックスのロックを試み、指定された時点まで
ミューテックスが利用できない場合に戻る (公開メンバ関数) |
|
|
ミューテックスをアンロックする
(公開メンバ関数) |
|
|
Cドキュメント
for
mtx_lock
|
|