.net - 多线程写入,从队列中读取一个线程,线程安全

标签 .net multithreading thread-safety queue

过去,我对并发线程的经验很少,因此在这里我需要一些帮助。

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

由于我在线程安全方面略有经验,我是否需要做一些特定的事情以确保某些事情不会意外出现问题?考虑的一个要求是,排队的对象首先要与发送到排队类的确切顺序相同。

我认为必须使用ConcurrentQueue是必须的吗?还是我必须通过排队和锁定来开始做自己的魔术?

最佳答案

如果您使用ConcurrentQueue,那么实际上就没有太多要做的排队工作了。除非您真的被迫这么做,否则不要自己动手,多线程很难正确实现,调试起来一点也不有趣。

请记住,如果您有多个编写器,则可能没有严格的数据插入顺序,也就是说,如果一个线程尝试添加“A”而一个线程尝试添加“B”,则它们被添加的顺序最终可能会有所不同,只是时序略有变化。

关于.net - 多线程写入,从队列中读取一个线程,线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18074530/

相关文章:

.net - 与 MySQL 的 ODBC 连接不会添加值

.net - 系统.IO.IOException : 'The process cannot access the file'

Java - 找不到符号类并发

java - 防止多个线程同时使用多种方法

c++ - std::mutex 的线程安全

.net - 使用 NuGet 包确保可重复构建

c# - 如何在不指定类型的情况下将泛型类存储在列表中?

java - 为什么在交互中的同步集合中再次同步?

java - 设置 HashMap 线程安全吗?

c# - 用于解析的可扩展类型安全枚举类?