std::mutex::try_lock
來自 cppreference.com
bool try_lock(); |
(C++11 起) | |
嘗試鎖定互斥體。立即返回。如果成功獲取鎖,則返回 true,否則返回 false。
此函式可能虛假失敗並返回 false,即使互斥體當前未被任何其他執行緒鎖定。
如果 try_lock
由已擁有 mutex
的執行緒呼叫,則行為未定義。
如果此操作返回 true,則在同一互斥體上先前的 unlock() 操作與此操作同步(定義於 std::memory_order)。請注意,如果此操作返回 false,則先前的 lock() 不與此操作同步。
目錄 |
[編輯] 引數
(無)
[編輯] 返回值
如果成功獲取鎖,則為 true,否則為 false。
[編輯] 異常
不丟擲任何異常。
[編輯] 示例
執行此程式碼
#include <chrono> #include <iostream> // std::cout #include <mutex> #include <thread> std::chrono::milliseconds interval(100); std::mutex mutex; int job_shared = 0; // both threads can modify 'job_shared', // mutex will protect this variable int job_exclusive = 0; // only one thread can modify 'job_exclusive' // no protection needed // this thread can modify both 'job_shared' and 'job_exclusive' void job_1() { std::this_thread::sleep_for(interval); // let 'job_2' take a lock while (true) { // try to lock mutex to modify 'job_shared' if (mutex.try_lock()) { std::cout << "job shared (" << job_shared << ")\n"; mutex.unlock(); return; } else { // can't get lock to modify 'job_shared' // but there is some other work to do ++job_exclusive; std::cout << "job exclusive (" << job_exclusive << ")\n"; std::this_thread::sleep_for(interval); } } } // this thread can modify only 'job_shared' void job_2() { mutex.lock(); std::this_thread::sleep_for(5 * interval); ++job_shared; mutex.unlock(); } int main() { std::thread thread_1(job_1); std::thread thread_2(job_2); thread_1.join(); thread_2.join(); }
可能的輸出
job exclusive (1) job exclusive (2) job exclusive (3) job exclusive (4) job shared (1)
[編輯] 參閱
鎖定互斥體,如果互斥體不可用則阻塞 (public member function) | |
解鎖互斥體 (public member function) | |
有關 mtx_trylock 的 C 文件
|