2011-06-02 52 views
7

我的線程如何工作的模型是一些ThreadManager給每個線程輪流。當它輪到一個線程時,它會執行幾行代碼。爲什麼暫停/中止線程很糟糕?

要暫停一個線程,不能只有一個只有ThreadManager(暫時)停止允許該線程轉彎?

要中止一個線程,不能ThreadManager只是永遠不會讓這個線程又一個回合?

有什麼問題?從MSDN

回答

12

報價有關暫停線程:

你不知道一個 線程執行哪些代碼的方式,當你暫停 它。如果您在安全 權限評估過程中掛起一個線程,而其 持有鎖定,則可能會阻止AppDomain中的其他線程 。如果 您掛起一個線程,而 執行一個類構造函數,則嘗試 的AppDomain中的其他 線程將被阻止。 死鎖很容易發生。

中止的線程可能會導致不可預測的情況。有一篇關於此的好文章:http://www.bluebytesoftware.com/blog/2009/03/13/ManagedCodeAndAsynchronousExceptionHardening.aspx

4

我同意Alex的觀點,但是要進一步闡述,如果你需要「暫停」一個線程,最好是看看像Semaphores,Mutexes這樣的鎖定機制,或許多其他可用的之一。

但是,不知道你的代碼,Windows是一個搶先式多任務環境。通常這不是必需的,只是讓你的線程運行,底層的操作系統和調度程序將確保你所有的任務得到公平的回合。

+0

+1爲受控鎖定方法。 – 2011-06-02 05:18:42

相關問題