很多人都說使用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可...