在編寫windows程序時,只有一個臨界區還出現死鎖的常見原因。

    這是我兩年前遇到的問題,只有一個臨界區,在對窗口進行操作的時候就會出現死鎖!按照我當時的經驗,我想到的是:你妹,只有一個臨界區竟然鎖起了,電腦你有沒有認真看教科書啊?

    還好那中情況很容易觸發,經過多次調試,以及在CSDN朋友們的幫助下,確認了問題的根源,那就是:win程序在用SendMessage發送、響應消息的時候也相當於是一個臨界區,因爲用Send的方式發送消息時,會等待消息被處理之後再返回。而對界面的操作幾乎都要用Send的方式發送消息。

    若出現以下的步驟,在只有一個臨界區的時候就會死鎖:

    1.線程1進入臨界區

    2.操作界面觸發Send方式的消息A

    3.響應消息A,需要進入臨界區(等待進入)

    4.線程1用Send方式發送消息B(等待響應)

    此時,線程1 進入了臨界區,等待響應消息。主線程正在響應消息,但是要等待進入臨界區才能完成,於是死鎖了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章