std::defer_lock_t, std::try_to_lock_t, std::adopt_lock_t
提供:cppreference.com
|
|
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
| struct defer_lock_t { }; |
(C + + 11以来) | |
| struct try_to_lock_t { }; |
(C + + 11以来) | |
| struct adopt_lock_t { }; |
(C + + 11以来) | |
std::defer_lock_t、std::try_to_lock_tとstd::adopt_lock_tstd::lock_guardとstd::unique_lockためのロック方法を指定するために使用する空の構造体タグタイプです.Original:
std::defer_lock_t, std::try_to_lock_t and std::adopt_lock_t are empty struct tag types used to specify locking strategy for std::lock_guard and std::unique_lock.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
| タイプ
Original: Type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
Effect(s) |
defer_lock_t
|
ミューテックスの所有権を取得するものではありません
Original: do not acquire ownership of the mutex The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
try_to_lock_t
|
ブロックせずに、ミューテックスの所有権を取得しよう
Original: try to acquire ownership of the mutex without blocking The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
adopt_lock_t
|
呼び出し元のスレッドが既にミューテックスの所有権を持っていると仮定する
Original: assume the calling thread already has ownership of the mutex The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
[編集] 例
#include <mutex> #include <thread> struct bank_account { explicit bank_account(int balance) : balance(balance) {} int balance; std::mutex m; }; void transfer(bank_account &from, bank_account &to, int amount) { // attempt to lock both mutexes without deadlock std::lock(from.m, to.m); // make sure both already-locked mutexes are unlocked when // we're done; if we just used the lock_guard without std::lock // and std::adopt_lock, we might deadlock with other calls to transfer std::lock_guard lock1(from.m, std::adopt_lock); std::lock_guard lock2(to.m, std::adopt_lock); from.balance -= amount; to.balance += amount; } int main() { bank_account my_account(100); bank_account your_account(50); std::thread t1(transfer, my_account, your_account, 10); std::thread t2(transfer, your_account, my_account, 5); t1.join(); t2.join(); }
[編集] も参照してください
| タグの定数は、ロック方法を指定するために使用します Original: tag constants used to specify locking strategy The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (定数) | |
| オプションで、任意のミューテックスをロックして、lock_guardを構築します Original: constructs a lock_guard, optionally locking the given mutex The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (パブリックメンバ関数of std::lock_guard)
| |
| 必要に応じて付属のミューテックスをロックして、 unique_lockを構築します Original: constructs a unique_lock, optionally locking the supplied mutex The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (パブリックメンバ関数of std::unique_lock)
| |