对于多数任务,通过将执行请求以线程池线程的方式排队,可以降低复杂性。
死锁和争用条件
多线程处理解决了吞吐量和响应性问题,但引入此功能会带来新的问题:死锁和争用条件。
死锁
两个线程都不能继续执行。
Monitor.TryEnter。
争用条件
多次运行程序会产生不同的结果,并且无法预测任何给定运行的结果。
Interlocked.Increment),可以轻松避免这种争用条件。
一般性建议
使用多线程时需考虑以下准则:
- Thread.Abort 终止其他线程。
- Thread.Resume 同步多个线程的活动。
- 不要从主程序中控制工作线程的执行(如使用事件)。
- 不要将类型用作锁定对象。
- 锁定实例时要谨慎。
- 请务必针对需要不同资源的任务使用多线程,避免向单个资源指定多个线程。
- Interlocked 类的方法,而不是
lock语句(Visual Basic 中的SyncLock)。