关于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