簡體   English   中英

`std :: timed_mutex`的有效用例?

[英]Valid use cases for `std::timed_mutex`?

在哪種情況下, std :: timed_mutex比普通的互斥鎖更受歡迎?

我能想到的唯一用例是作為(IMO hackish)防止死鎖的方法。

在其他情況下std::timed_mutex會是一個不錯的選擇嗎?

這是Windows上常見的設計實踐,您可以使用具有超時值的WaitForSingleObjectWaitForMultipleObjects ,指定等待失敗的時間。

它不習慣解決死鎖(實際上沒有用,嚴重的線程代碼是嚴格的線程代碼)。

請記住,在Windows Vista發布之前,Windows沒有等效的Posix條件變量,這是一種完全不同的多線程編碼范例,它發揮了作用,但並不是定時互斥鎖存在的唯一原因。

定時等待的使用不是您在基本示例中看到的,但在復雜的架構中,您經常會遇到它。 使用互斥鎖的示例通常是某種生產者 - 消費者體系結構,其中客戶端必須每隔x秒執行一次操作,並且可能以觸發事件的形式出現“中斷”。 一個簡單的偽代碼示例:

//This code will run indefinitely, printing the value of 
//the variable x every 1 second until an interrupt is received
while(timed_wait(end_mutex, 1 second) != success)
    print(x)

是的,這段代碼可以改寫如下:

while(true){
   sleep(1 second)
   wait(mutex)
   done = globalDone
   unlock(mutex)

   if(done) break
   else print(x)
}

但是前面的例子既清潔又響應更快,因為它不是睡眠(即任何時候互斥體變得可用,它就會停止)。

請注意,Linux有其他功能,不是Posix標准的一部分,用於對互斥鎖進行定時等待( pthread_mutex_timedlock ,但我認為它現在在posix規范中)。 OS X和BSD上的sysv信號量也是如此。 如果你足夠聰明只在適當時使用它,它是一個有用的工具。

定時互斥等待的最佳用例是僅在特定時間內有效的操作,因此在資源擁塞時它們應該失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM