這是我兩年前遇到的問題,只有一個臨界區,在對窗口進行操作的時候就會出現死鎖!按照我當時的經驗,我想到的是:你妹,只有一個臨界區竟然鎖起了,電腦你有沒有認真看教科書啊?
還好那中情況很容易觸發,經過多次調試,以及在CSDN朋友們的幫助下,確認了問題的根源,那就是:win程序在用SendMessage發送、響應消息的時候也相當於是一個臨界區,因爲用Send的方式發送消息時,會等待消息被處理之後再返回。而對界面的操作幾乎都要用Send的方式發送消息。
若出現以下的步驟,在只有一個臨界區的時候就會死鎖:
1.線程1進入臨界區
2.操作界面觸發Send方式的消息A
3.響應消息A,需要進入臨界區(等待進入)
4.線程1用Send方式發送消息B(等待響應)
此時,線程1 進入了臨界區,等待響應消息。主線程正在響應消息,但是要等待進入臨界區才能完成,於是死鎖了。