終止正在執行的執行緒

2021-07-06 07:05:50 字數 721 閱讀 6841

很多人都說使用abort方法來終止執行緒,其實這種做法並不可取!如果你的執行緒正在操作臨界資源,很有可能會造成資源沒有正確釋放而出現死鎖問題。正確的做法應該是使用標記來終止執行緒的執行。

下面我們來看具體的操作步驟。

首先定義乙個「停止」訊號變數:

view plaincopy to clipboardprint?

private volatile bool canstop = false;  

注意這裡我們使用了volatile關鍵字,因為canstop變數將會被呼叫執行緒和執行執行緒同時使用,即在呼叫執行緒中初始化以及設定它的值,而在執行執行緒中判斷它的值。這樣做就告訴編譯器,這個canstop變數將被多個執行緒所使用,強制編譯器不對其狀態進行優化。如果有興趣可以上msdn檢視關於這個volatile關鍵字的更多解釋。此處同時也給canstop做了初始化。

現在我們看看執行緒的建立與執行的**:

view plaincopy to clipboardprint?

i = 0;   

// 使用匿名方法定義執行緒的執行體

thread thread = new thread(   

delegate(object param)   

// 此時已經收到停止訊號,可以在此釋放資源並

// 初始化變數

canstop = false;   

});   

thread.start();  

C 實現終止正在執行的執行緒

一般來說,很多人都會使用abort方法來終止執行緒,其實這種做法並不可取!如果你的執行緒正在操作臨界資源,很有可能會造成資源沒有正確釋放而出現死鎖問題。正確的做法應該是使用標記來終止執行緒的執行。基本思路是 定義乙個用於描述 停止 訊號的變數,在整個程式啟動前,設定該變數為false。程中,迴圈判斷...

postgreSQL 終止正在執行的SQL

雖然可以使用 kill 9 來強制刪除使用者程序,但是不建議這麼去做。因為 對於執行update的語句來說,kill掉程序,可能會導致postgres進入到recovery mode 而在recovery mode下,會鎖表,不允許鏈結資料庫。通常情況下 使用如下語句 select datname,...

Matlab 終止正在執行的程式

終止matlab正在執行的程式,一般有三種方法。ctrl c ctrl break ctrl alt break 如果是在服務bai器上跑的 的話,按完快捷鍵之後有時候需要等一小會,程式才會停。有時候跑matlab記憶體占用過高,會有宕機的情況,這時候可以關閉matlab優化程式。關閉matlab可...