多个线程写入,一个线程从队列读取,线程安全

时间:2013-08-06 07:51:45

标签: .net multithreading thread-safety queue

我过去几乎没有使用并发线程的经验,所以我需要一些帮助。

基本上,我所拥有的是一个队列(无论是通过DI框架还是静态对象管理为单例)。我还有多个线程需要写入该队列,但是只有一个线程会出列。

由于我在线程安全方面缺乏经验,我是否需要做一些特定的事情以确保某些事情不会意外出错?考虑其中一个要求是排队对象的确切顺序是它们首先被发送到排队类。

我认为必须使用ConcurrentQueue?或者我是否必须通过排队和锁定来开始自己的魔法?

2 个答案:

答案 0 :(得分:0)

ConcurrentQueue是一个很好的开始,可能只需要知道它就可以使它工作。注意可能需要锁定或使用专门的并发类的线程之间可能共享的其他资源。

答案 1 :(得分:0)

如果你使用ConcurrentQueue,那么关于排队的其他工作真的不多。不要自己动手,除非你真的被迫,多线程是才能做到正确,而且调试并不是很有趣。

请记住,如果你有多个编写器,可能没有严格的数据插入顺序,也就是说,如果一个线程试图添加“A”并且一个线程试图添加“B”,那么它们的顺序是加入时可能会因为时间的微小变化而变得不同。