可以使用sem_trywait()
讓你進入死鎖或活鎖?可以使用sem_trywait()導致死鎖
0
A
回答
0
如果您有多個線程,幾乎所有函數都可能參與潛在的活鎖或死鎖(或兩者兼有),具體取決於它的使用方式。算法很重要。現在,有一些特定的使用模式可能會或可能不會形成活動或死鎖,但是從功能名稱來看,很難用任何特定的方式來回答。
0
如果兩個線程正在爭奪由對方的信號鎖定的相同資源,它應該會失敗並返回E_DEADLK。這是正確的行爲,但您需要檢測它並在發生時重試。換句話說,是的,它可能會死鎖,但是系統會檢測到這個並且失效,而不是讓你掛起。
相關問題
- 1. AutoResetEvent.WaitOne()導致死鎖
- 2. Thread.Join()導致死鎖
- 3. 會導致死鎖?
- 4. pthread_mutex_lock導致死鎖
- 5. Java MySQL可能導致死鎖?
- 6. Javascript Ajax可能導致死鎖嗎?
- 7. MemoryStream.CopyTo()導致線程死鎖
- 8. 導致死鎖的SQLBulkCopy
- 9. Ruby:open會導致死鎖
- 10. 運行PIP導致死鎖
- 11. 調用Runtime.getRuntime()。EXEC(...)導致死鎖
- 12. 只使用關鍵部分的讀/寫鎖會導致死鎖
- 13. 如何在concurrent.futures.ThreadPoolExecutor中使用不會導致死鎖的鎖?
- 14. 什麼可能導致單個寫/多讀鎖的死鎖?
- 15. 硬件發生「死鎖」還是軟件導致死鎖?
- 16. 鎖定專用鎖對象導致死鎖
- 17. 線程關閉導致的死鎖
- 18. JxBrowser導致線程死鎖120秒
- 19. WCF服務導致SQL死鎖錯誤
- 20. 這怎麼會導致死鎖?
- 21. INSERT操作是否會導致死鎖?
- 22. 如何成功導致死鎖
- 23. 導致死鎖的SQL更新
- 24. 此代碼如何導致死鎖?
- 25. 異步等待導致死鎖
- 26. pthread_mutex_lock和pthread_cond_wait/signal導致死鎖
- 27. 導致死鎖錯誤的SQL查詢
- 28. 爲什麼這不會導致死鎖
- 29. 我的GetEnumerator會導致死鎖嗎?
- 30. 此代碼是否會導致死鎖?
該函數本身不能死鎖,因爲它不會等待任何東西,但當然在循環中調用它可能會死鎖。 – 2012-07-12 03:11:03
@R,你甚至不需要循環 - 只要與另一個非trywait鎖進行交互即可。我的觀點是,你不能僅僅因爲它使用sem_trywait而聲明一個沒有死/活鎖的程序。 – bdonlan 2012-07-12 03:22:07
由於每條指令都會推進進度,所以不會循環(或遞歸)的程序不會死鎖... :-) – 2012-07-12 03:50:52