一般线程问题

时间:2010-11-03 19:23:20

标签: c# .net multithreading

我对C#中的线程有点新意,并且对于那里的内容有几个问题:

  • 在C#中实现线程有哪些方法? (即我可以想到两个顶部:backgroundWorker,Thread等)

    • 如何导致死锁?如果出现死锁,你怎么摆脱它(在C#中)?

    • 后台工作者如何实施?它似乎有一套潜在的方法,但我想知道那些方法和实例是什么......

谢谢!

5 个答案:

答案 0 :(得分:10)

C#中线程的权威初学者指南在这里: http://www.albahari.com/threading/

BackgroundWorker 上的文档以及完整的工作示例位于:http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

死锁在此解释:http://www.albahari.com/threading/part2.aspx

线程可以通过多种方式实现。您可以直接使用它们,从ThreadPool中提取它们,或使用Task Parallel Library间接使用它们。

答案 1 :(得分:9)

答案 2 :(得分:0)

.net 4提供并行LINQ。如果你想并行化一个无副作用的计算,这很容易在函数/ linq风格中表达。

答案 3 :(得分:0)

对于所有常见用途和目的,请使用Thread。如果您想从某个线程与GUI进行通信,您可能会考虑使用BackgroundWorker,因为它会自动序列化(使用Invoke())对GUI方法的调用,因此您不会遇到GUI锁定问题。 / p>

就僵局而言,不要担心它们。只有当你有2个线程竞争同一组资源时才有可能发生死锁,我想你现在还不会解决这个问题。

答案 4 :(得分:0)

我会将答案分为3个部分。因此,使用.net 4.0,上面的所有示例都属于以下三大类: 1.由.net线程池管理的线程(异步委托调用,后台工作等) 2.线程类 - 你必须自己管理线程的生命周期 最后是需要多核CPU的Parallel Linq。