c#多线程

时间:2018-04-03 09:32:35

标签: c# multithreading service

我有一个打印服务,现在也会进行文件集成,为了同时执行这两项任务我虽然使用了线程。

看到此Thread Tutorial后,我搜索了Join do.

如果我没错,Join会终止该帖子,对吧?所以我的问题在这里,因为服务应该全天候运行,直到有人需要停止线程,我可以只做一个Thread.Sleep让他们等待下一次交互而不是加入并再次启动它们吗?

即使他们使用不同的方法使用不同的对象,他们仍然可以给出死锁吗?因为这是一项服务,所以我不能让它时间陷入僵局。

编辑:我做了以下测试,似乎运行良好,任何有更多使用线程经验的人都可以检查以后是否会引起我的问​​题? (此代码是测试样本,不是我的服务)。

My sample

1 个答案:

答案 0 :(得分:1)

  

加入终止线程,对吗?

不,它一直等到线程完成。

  

我可以做一个Thread.Sleep让他们等待下一次交互而不是加入并再次启动它们吗?

是的,你可以这样做。根据您的体系结构,您还可以使用BlockingCollection将项目排队以在单独的线程中处理,并在另一个线程中执行它们。

  

即使他们使用不同的方法使用不同的对象,他们仍然会出现死锁吗?

好吧,如果你用错误的方式编写代码,它们就可以了。除了记住两个方法在同一时间调用某些共享代码的所有时间,导致竞争条件和死锁时,没有快速简单的解决方法。