C 中 託管執行緒的狀態

2022-04-12 08:22:23 字數 736 閱讀 7013

試著畫了乙個狀態圖,不一定對

乙個執行緒至少總是處於 threadstate 列舉中的乙個可能狀態,並且可以同時處於多個狀態。進入託管環境的非託管執行緒已處於已啟動狀態。 執行緒在啟動狀態後,許多操作都可使執行緒更改狀態。 下表列出使狀態發生更改的操作以及相應的新狀態。

操作

由於 running 狀態的值為 0,因此無法執行位測試來發現此狀態。 但可以使用以下測試(以偽**表示)。

if ((state & (unstarted | stopped)) == 0)   //

implies running

在任何給定時間,執行緒通常處於多個狀態中,例如,如果某個執行緒在 monitor.wait 呼叫被阻止,並且另乙個執行緒對同乙個執行緒呼叫 abort,則該執行緒將同時處於waitsleepjoin 和 abortrequested 狀態。(這個也太過分了吧,狀態機就很難說明問題了)。 在這種情況下,一旦該執行緒從對 wait 的呼叫返回或該執行緒中斷,它就會收到 threadabortexception。

一旦執行緒由於呼叫 start 而離開 unstarted 狀態,那麼它將無法再返回到 unstarted 狀態。 同樣,執行緒也永遠無法離開 stopped 狀態。

託管執行緒處理的最佳做法

多執行緒程式設計需要在程式設計時倍加注意。對於多數任務,通過將執行請求以執行緒池執行緒的方式排隊,可以降低複雜性。本主題將 更複雜的情形,比如協調多個執行緒的工作或處理造成阻止的執行緒。死鎖和爭用條件 多執行緒程式設計解決了吞吐量和響應性問題,但引入此功能會帶來新的問題 死鎖和爭用條件。當兩個執行緒...

託管執行緒處理的最佳做法

多執行緒程式設計需要在程式設計時倍加注意。對於多數任務,通過將執行請求以執行緒池執行緒的方式排隊,可以降低複雜性。本主題將 更複雜的情形,比如協調多個執行緒的工作或處理造成阻止的執行緒。多執行緒程式設計解決了吞吐量和響應性問題,但引入此功能會帶來新的問題 死鎖和爭用條件。當兩個執行緒中的每乙個執行緒...

C 中的託管和非託管

注意!先看左上角宣告!我不想誤人子弟!但我不怕思考。沒有思考就沒有錯誤,互相學習,共同進步!如果這句話是對的,應該是對的,那麼託管就好理解了,自己搜中間語言去 我們編寫的語言要通過中間語言來翻譯即所謂的託管給il 那麼非託管就是不用il即不用中間語言翻譯,別人 微軟把 已經把這個語句翻譯好了,說白了...