2012-07-12 152 views

回答

0

如果您有多個線程,幾乎所有函數都可能參與潛在的活鎖或死鎖(或兩者兼有),具體取決於它的使用方式。算法很重要。現在,有一些特定的使用模式可能會或可能不會形成活動或死鎖,但是從功能名稱來看,很難用任何特定的方式來回答。

+0

該函數本身不能死鎖,因爲它不會等待任何東西,但當然在循環中調用它可能會死鎖。 – 2012-07-12 03:11:03

+0

@R,你甚至不需要循環 - 只要與另一個非trywait鎖進行交互即可。我的觀點是,你不能僅僅因爲它使用sem_trywait而聲明一個沒有死/活鎖的程序。 – bdonlan 2012-07-12 03:22:07

+0

由於每條指令都會推進進度,所以不會循環(或遞歸)的程序不會死鎖... :-) – 2012-07-12 03:50:52

0

如果兩個線程正在爭奪由對方的信號鎖定的相同資源,它應該會失敗並返回E_DEADLK。這是正確的行爲,但您需要檢測它並在發生時重試。換句話說,是的,它可能會死鎖,但是系統會檢測到這個並且失效,而不是讓你掛起。