執行緒 執行和阻塞狀態詳解

2021-09-24 20:05:49 字數 624 閱讀 3502

所有現代的桌面和伺服器作業系統都採用搶占式排程策略,但一些小型裝置如手機等可能採用協作式排程策略,在這樣的系統中,只有當乙個執行緒呼叫了它的sleep()或yield()方法後才會放棄其所占用的資源——也就是必須有執行緒主動放棄其所占用的資源。

當發生如下情況時,執行緒將進入阻塞狀態:

1、執行緒呼叫了sleep()方法主動放棄其所占用的處理器資源;

2、執行緒呼叫了乙個阻塞式i/o方法,在該方法返回之前,該執行緒被阻塞;

3、執行緒試圖呼叫乙個鎖物件,但該鎖物件整備其他執行緒所持有的;

4、執行緒正在等待某個通知

當前正在執行的執行緒被阻塞之後,其他執行緒就可以後的執行的機會。被阻塞的執行緒會在合適的時候重新進入就緒狀態,注意是就緒狀態,而不是執行狀態。也就是說,被阻塞執行緒的阻塞解除之後,必須重新等待執行緒排程再次排程它。

針對上面幾種情況,當發生如下特定的情況時可以解除阻塞,讓該執行緒重新進入就緒狀態。

1、呼叫sleep()方法的執行緒超過了指定的時間;

2、執行緒呼叫的阻塞式i/o方法已經返回;

3、執行緒成功的獲得了試圖獲取的鎖物件;

4、執行緒正在等待某個通知時,其他執行緒發出了乙個通知。

16 3 2 執行狀態和阻塞狀態

如果處於就緒狀態的執行緒獲得了cpu,開始執行run 方法的執行緒執行體,則該執行緒處於執行狀態,如果計算機只有乙個cpu,那麼在任何時刻只有乙個執行緒處於執行狀態。當然,在乙個多處理器的機器上,將會有多個執行緒並行執行 不過當執行緒數大於處理器數時,依然會存在多個執行緒在同乙個cpu上輪換的現象。...

執行緒阻塞狀態例項分析

有三種方法可以暫停threads執行 1.sleep方法 sleep時別的執行緒也不可以訪問鎖定物件。2.yield方法 讓出cpu的使用權,從執行態直接進入就緒狀態。讓cpu重新挑選哪乙個執行緒進入執行狀態。3.join方法 當某乙個執行緒等待另乙個執行緒執行結束後,才繼續執行時,使用join方法...

如何結束阻塞狀態的執行緒

vc mfc 2009 02 07 16 30 26 閱讀109 字型大小 大 中小訂閱 如果乙個執行緒由於等待某些事件的發生而被阻塞,又該如何實現該執行緒的中斷呢?比如當乙個執行緒由於需要等候鍵盤輸入而被阻塞,處於不可執行狀態時,即使主程式中將該執行緒的共享變數設定為true,但該執行緒此時根本無...