public member function
<mutex>

std::timed_mutex::lock

void lock();
鎖定 timed mutex
呼叫執行緒鎖定 timed_mutex,如果需要則阻塞(行為與 mutex 完全相同)。

  • 如果 timed_mutex 當前未被任何執行緒*鎖定*,則呼叫執行緒*鎖定*它(從此刻起,直到呼叫其成員函式 unlock,該執行緒*擁有* timed_mutex)。
  • 如果 timed_mutex 當前被另一個執行緒鎖定,則呼叫執行緒的執行將被阻塞,直到被另一個執行緒*解鎖*(其他未鎖定的執行緒將繼續執行)。
  • 如果 timed_mutex 當前被呼叫此函式的同一執行緒鎖定,則會產生*死鎖*(具有*未定義行為*)。有關允許同一執行緒進行多次鎖定的* timed mutex 型別*,請參閱 recursive_timed_mutex

timed_mutex 的所有*鎖定*和*解鎖*操作遵循單一的總順序,所有*可見效果*都在*鎖定操作*和同一物件上的先前* 解鎖操作*之間同步。

請注意,不同併發*鎖定*被排程返回的順序是不確定的,不一定與它們被鎖定的順序相關(取決於系統和庫實現)。

引數



返回值



資料競爭

timed_mutex 物件被修改為*原子操作*(不會導致資料競爭)。

異常安全

基本保證:如果此成員函式丟擲異常,則 timed_mutex 物件仍處於有效狀態。此外,發起呼叫丟擲異常的執行緒不會獲得鎖。
如果 timed_mutex 已被當前執行緒鎖定,呼叫此函式會導致死鎖(*未定義行為*):在某些庫實現中,這會導致函式失敗。

如果呼叫失敗,將丟擲system_error 異常
異常型別錯誤條件描述
system_errorerrc::resource_deadlock_would_occur檢測到死鎖(實現可能會檢測到某些死鎖情況)。
system_errorerrc::operation_not_permitted執行緒沒有執行該操作的許可權。
system_errorerrc::device_or_resource_busy正在操作的*原生控制代碼型別*已被鎖定。
根據庫實現的不同,此成員函式還可能丟擲異常來報告其他情況。

另見