suspend造成死鎖的例子和原因分析

2021-04-27 18:59:27 字數 389 閱讀 6757

今天loris分享了乙個關於使用suspend造成死鎖的例子,部分**如下:

win32下的api基本都是執行緒安全的,因此api裡面有很多執行緒同步的地方,loadlibrary裡面有乙個臨界區,執行緒函式在執行到loadlibrary裡面之後,如果剛好走到loadlibrary的臨界區裡面,此時主線程的ontimer觸發,將該執行緒掛起,ontimer繼續執行,執行到loadlibrary後,由於執行緒中loadlibrary還沒有從臨界區出來,此時就造成主線程ontimer裡面的loadlibrary無限等待,主線程掛起。

因此不建議用suspend暫停執行緒,msdn也有說明,suspend最好只在debug裡面使用。

那怎麼使執行緒掛起呢?可以使用事件等方式,用wait族函式來暫停執行緒。

【end】

wait和notify造成死鎖的例子

public class threadlocktest implements runnable public static void main string args throws interruptedexception override public void run catch interru...

多執行緒造成死鎖的例子

1 假設有如下 pthread mutex t mutex 代表乙個全域性互斥物件 void a void b int main 此時會由於在a b方法中相互等待unlock而導致死鎖。2 假設有如何 mutex 代表乙個全域性互斥物件 void a mutex.unlock return 由於在i...

死鎖的例子

description program name date author yeeku.h.lee kongyeeku 163.com version 1.0 class a catch interruptedexception ex system.out.println 當前執行緒名 thread....