过去,我对并发线程的经验很少,因此在这里我需要一些帮助。
基本上,我拥有的是一个队列(无论是通过DI框架还是在静态对象中作为单例进行管理)。我也有多个线程需要写入该队列,但是只有一个线程会出队。
由于我在线程安全方面略有经验,我是否需要做一些特定的事情以确保某些事情不会意外出现问题?考虑的一个要求是,排队的对象首先要与发送到排队类的确切顺序相同。
我认为必须使用ConcurrentQueue是必须的吗?还是我必须通过排队和锁定来开始做自己的魔术?
最佳答案
如果您使用ConcurrentQueue
,那么实际上就没有太多要做的排队工作了。除非您真的被迫这么做,否则不要自己动手,多线程很难正确实现,调试起来一点也不有趣。
请记住,如果您有多个编写器,则可能没有严格的数据插入顺序,也就是说,如果一个线程尝试添加“A”而一个线程尝试添加“B”,则它们被添加的顺序最终可能会有所不同,只是时序略有变化。
关于.net - 多线程写入,从队列中读取一个线程,线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18074530/