HOP*_*OPE 2 c# multithreading thread-safety
假设我们有多个线程和一个List负责保存实时数据的公共。我们有一些线程负责将数据添加到列表对象。另一个线程负责从列表对象中获取数据,然后从顶部删除项目。
问题:从 a 的开头删除List并同时在单独的线程中将数据添加到列表的末尾是否安全?List对象是如何实现的?
从文档:
这种类型的公共静态成员是线程安全的。不保证任何实例成员都是线程安全的。
对 List 执行多次读取操作是安全的,但如果在读取时修改集合,则可能会出现问题。
因此,如果您的集合可以被某些线程修改 - 您需要在写入和读取操作上锁定它。
文档还为您提供了另一种解决方案:
有关具有内置同步的集合,请参阅System.Collections.Concurrent命名空间中的类。
例如,像ConcurrentQueue。用于.Enqueue(obj)在队列末尾插入它并TryDequeue(out obj)从队列顶部获取它。
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |