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

2022-09-26 08:21:14 字數 956 閱讀 5937

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

基本思路是:定義乙個用於描述「停止」訊號的變數,在整個程式啟動前,設定該變數為false。**程中,迴圈判斷該變數是否已經被設定為true,如果沒有,則繼續執行,否則就退出迴圈並釋放資源,然後退出執行。當我們需要執行緒退出時,只要設定這個「停止」訊號為true即可。

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

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

private volatile bool canstop = false;

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

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

i = 0;

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

thread thread = new thread(

delegate(object param)

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

// 初始化變數

canstop = false;

});

thread.start();

很簡單,**程的執行體中反覆判斷canstop變數是否為true,若是則立刻跳程式設計客棧出while迴圈(停止變數的自加以及更新介面的操作),然後重新初始化canstop變數為false,以便於下次的使用。

本文標題: c#實現終止正在執行的執行緒

本文位址: /ruanjian/csharp/113370.html

終止正在執行的執行緒

很多人都說使用abort方法來終止執行緒,其實這種做法並不可取!如果你的執行緒正在操作臨界資源,很有可能會造成資源沒有正確釋放而出現死鎖問題。正確的做法應該是使用標記來終止執行緒的執行。下面我們來看具體的操作步驟。首先定義乙個 停止 訊號變數 view plaincopy to clipboardp...

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可...