名稱空間
變體
操作

std::recursive_mutex::try_lock

來自 cppreference.com
 
 
併發支援庫
執行緒
(C++11)
(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++20)
(C++20)
期值
(C++11)
(C++11)
(C++11)
(C++11)
安全回收
(C++26)
危險指標
原子型別
(C++11)
(C++20)
原子型別的初始化
(C++11)(C++20 中已棄用)
(C++11)(C++20 中已棄用)
記憶體排序
(C++11)(C++26 中已棄用)
原子操作的自由函式
原子標誌的自由函式
 
 
bool try_lock() noexcept;
(C++11 起)

嘗試鎖定互斥體。立即返回。如果成功獲取鎖,則返回 true,否則返回 false

此函式可能虛假失敗並返回 false,即使互斥體當前未被任何其他執行緒鎖定。

一個執行緒可以重複在遞迴互斥體上呼叫 try_lock。成功的 try_lock 呼叫會增加所有權計數:互斥體只有在該執行緒進行相應次數的 unlock 呼叫後才會被釋放。

所有權的最大層數未指定。如果超出此層數,對 try_lock 的呼叫將返回 false

如果此操作返回 true,則同一互斥體上之前的 unlock() 操作與此操作同步(如 std::memory_order 中定義)。請注意,如果此操作返回 false,則之前的 lock() 不與此操作同步。

目錄

[編輯] 引數

(無)

[編輯] 返回值

如果成功獲取鎖,則為 true,否則為 false

[編輯] 異常

不丟擲任何異常。

[編輯] 示例

#include <iostream>
#include <mutex>
 
int main()
{
    std::recursive_mutex test;
    if (test.try_lock())
    {
        std::cout << "lock acquired\n";
        test.unlock();
    }
    else
        std::cout << "lock not acquired\n";
 
    test.lock();
    // non-recursive mutex would return false from try_lock now
    if (test.try_lock())
    {
        std::cout << "lock acquired\n";
        test.unlock(); 
    }
    else
        std::cout << "lock not acquired\n";
 
    test.unlock();
}

輸出

lock acquired
lock acquired

[編輯] 參閱

鎖定互斥體,如果互斥體不可用則阻塞
(public member function) [edit]
解鎖互斥體
(public member function) [edit]
C documentation for mtx_trylock