多线程

时间:2010-01-28 18:26:28

标签: c# multithreading

我现在正在学习多线程,在C#中学习,但与所有学习一样,我喜欢学习最佳实践。目前该地区似乎模糊不清。我理解基础知识,我可以创建线程。

创建多线程应用程序时,我应该注意什么?是否有任何我应该了解的规则或最佳实践?还是要记住什么以避免滑倒?

感谢您的回复。

5 个答案:

答案 0 :(得分:33)

MSDN Best Practices外,我还会添加:

  1. 不要制作自己的主题。更喜欢使用ThreadPool(或新的Task Parallel Library任务)。管理自己的线程很少(如果有的话)是正确的设计决策。
  2. 要特别注意与UI相关的问题。 Control.Invoke(Windows窗体)和Dispatcher.Invoke(WPF),或使用SynchronizationContext。当前发布/发送
  3. 请在适当时使用BackgroundWorker class
  4. 尝试通过锁定将同步保持在最低限度
  5. 确保同步所有需要同步的内容
  6. 尽可能支持Interlocked class中的方法,而不是锁定
  7. 一旦你变得更高级,并且正在尝试优化,还有其他需要寻找的东西:

    1. 提防false sharing。这在使用数组时尤其成问题,因为每个数组写入数组中的任何元素都包含.NET中的边界检查,这实际上导致对元素0附近的数组的访问(在内存中的元素0之前)。这可能导致性能上升。大大地走下坡路。
    2. 注意关闭问题,尤其是在循环情况下工作时。如果在创建委托时关闭了错误范围内的变量,则可能会发生令人讨厌的错误。

答案 1 :(得分:9)

MSDN - Managed Threading Best Practices

MSDN文章在触及危险区域并提供管理/解决这些领域的最佳实践方面做得非常好。

答案 2 :(得分:5)

因为我在另一个标签上打开了这个...

http://www.yoda.arachsys.com/csharp/threads/

我只有几章,但它是由Jon Skeet写的。

答案 3 :(得分:2)

你应该知道些什么吗? 肯定。

危险:

可以找到一篇有用且有趣的文章here

答案 4 :(得分:2)

我强烈建议您先从消化:http://www.albahari.com/threading/开始。