std::timed_mutex:: lock
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Locking | ||||
|
timed_mutex::lock
|
||||
| Native handle | ||||
|
void
lock
(
)
;
|
(C++11以降) | |
ミューテックスをロックします。他のスレッドが既にミューテックスをロックしている場合、
lock
の呼び出しはロックが取得できるまで実行をブロックします。
もしスレッドが既に
mutex
を所有している状態で
lock
が呼び出された場合、動作は未定義です:例えば、プログラムは
デッドロックする可能性があります
。不正な使用を検出できる実装では、デッドロックする代わりにエラー条件
resource_deadlock_would_occur
を持つ
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
|
|