關於C#線程掛起


Suspend()

  • 在C#中,線程的掛起可以使用suspend()方法。可此方法早就被官方強烈反對使用,因為你不知道suspend操作會使程序掛起在哪一行代碼,這很容易帶來一些意料之外的問題。在Visual Studio IDE中使用suspend會被提示“Thread.Suspend has been deprecated. Use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources."

不得不說微軟的文檔好!

文檔鏈接

  • 文檔已經說地很清楚了,使用suspend,你不知道線程正在執行什么代碼。如果線程掛起在一個類型的構造函數里,而其他對象對這個類型的對象有所依賴,那么很容易造成死鎖。
  • 這就是為什么如今的線程機制是cooperative model,需要線程自己去決定應該在哪里阻塞,而在那里阻塞由編寫代碼的人決定,這樣可以確保線程在被掛起時不會占據其它資源。比如ManaulResetEvent,給線程設置信號,線程在哪里掛起由WaitOne的位置決定,也就是由程序員確定。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM