其他分享
首页 > 其他分享> > [多线程]托管线程处理的最佳做法

[多线程]托管线程处理的最佳做法

作者:互联网

  多线程处理需在编程时倍加注意。 对于多数任务,通过将执行请求以线程池线程的方式排队,可以降低复杂性。 

死锁和争用条件

  多线程处理解决了吞吐量和响应性问题,但引入此功能会带来新的问题:死锁和争用条件。

死锁

  两个线程中的每一个线程都尝试锁定另外一个线程已锁定的资源时,就会发生死锁。 两个线程都不能继续执行。

  托管线程处理类的许多方法都提供了超时设定,有助于检测死锁。例如Monitor.TryEnter

争用条件

  争用条件是程序的结果取决于两个或更多个线程中的哪一个先到达某一特定代码块时出现的一种 bug。 多次运行程序会产生不同的结果,并且无法预测任何给定运行的结果。

  争用条件的一个简单例子是递增一个字段。 通过使用 Interlocked 类的方法(如 Interlocked.Increment),可以轻松避免这种争用条件。

一般性建议

  使用多线程时需考虑以下准则:

标签:Thread,托管,争用,死锁,线程,多线程,Interlocked
来源: https://www.cnblogs.com/amytal/p/11721332.html