這是場景。我們有很多線程訪問受關鍵部分保護的代碼段,從而確保一次只有一個線程可以訪問該部分。現在的問題是,如果一個線程死在臨界區內會發生什麼?應用程序是否掛起?或者有一些鎖定將被釋放的方式?如果某個線程死於臨界區域內會發生什麼情況?
1
A
回答
4
從MSDN:
如果一個線程終止,同時它有一個關鍵部分的所有權,關鍵部分的狀態是不確定的。
來源:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682608(v=vs.85).aspx
1
您將不得不定義「死亡」。
你的意思是說,它通過錯誤的內存或其他訪問錯誤?然後整個過程由操作系統拋出。
你的意思是線程被終止了(通過退出或由其他線程終止它)?那麼你遇到了麻煩,因爲包括線程終止在內的所有事情都已正確執行,所以等待臨界區的所有線程都將永久停留。
你是說線程進入無限循環?我不確定Windows如何處理這種情況,但有兩種策略:操作系統會假設「一切似乎運行正常,所以我應該遠離」,否則將會有一個系統範圍的CPU配額, OS終止進程。只有進程(線程在其中)可以導致單個線程終止,所有其他機制將拋出整個進程。
+0
我的意思是第二個選項,它要麼退出或者其他某個線程終止它。 – Ram
相關問題
- 1. 如果某個進程意外死亡,進程內存會發生什麼情況?
- 2. 如果我監視,會發生什麼情況。當另一個線程處於臨界區域時沒有鎖定時有條件地輸入?
- 3. 如果一個ThreadPool線程死亡會發生什麼?
- 4. TFS - 如果我刪除工作區會發生什麼情況?
- 5. 如果您從終端殺死該程序,會發生什麼情況?
- 6. 如果堆棧內存變滿,會發生什麼情況
- 7. 如果Linux內核自行刪除會發生什麼情況?
- 8. 如果minSdkVersion低於targetSdkVersion,會發生什麼情況?
- 9. 如果你的消費者少於分區,會發生什麼情況?
- 10. 如果某些線程比其他線程首先結束會發生什麼情況?
- 11. 線程分配內存,主進程死亡,會發生什麼?
- 12. 如果在rootfs上發生內存泄漏,會發生什麼情況?
- 13. 如果您殺死長時間運行的alter query,會發生什麼情況?
- 14. 如果服務停止,後臺線程會發生什麼情況?
- 15. 如果我在asp.net中創建線程,會發生什麼情況?
- 16. 如果我分離已加入的線程會發生什麼情況?
- 17. 如果從主線程外部調用dispatch_main,會發生什麼情況?
- 18. 容器關閉時睡眠線程會發生什麼情況?
- 19. 從while循環中啓動線程,會發生什麼情況?
- 20. 未能獲取鎖的線程會發生什麼情況?
- 21. 如果finally塊引發異常,會發生什麼情況?
- 22. 如果CFile :: Write引發異常會發生什麼情況?
- 23. 如果iOS分發證書過期會發生什麼情況?
- 24. 如果我的IExceptionPublisher引發異常,會發生什麼情況?
- 25. 線程內線程:如果父線程被終止會發生什麼?
- 26. 如果我將工作發佈到線程池並且線程已在boost工作,會發生什麼情況?
- 27. 工作線程發佈消息時,如果主線程忙,會發生什麼情況?
- 28. 如果我更改我網站的域名,cookie會發生什麼情況?
- 29. 這是什麼時候發生的?線程在臨界區暫停
- 30. 爲什麼會發生這種情況?
若要進一步擴展:如果此行爲不合適,請使用互斥鎖而不是臨界區。 –