c# - 我们可以在 C# 中进行列表的原子交换吗?
问题描述
有两个列表:第一个包含很多大对象(大型结构)。
第二个应该只包含第一个列表中过滤的对象子集。
有一个线程必须尽快通过第二个列表。有第二个线程进行过滤,因为过滤很昂贵,我们不想打扰第一个线程。
在 C 或 C++ 中,我会这样做:
- 将结构/对象的平面数组作为第一个列表
- 制作一个指针数组作为第二个列表,并设置一个指向该数组的公共指针以供两个线程共享
- 执行过滤的线程将创建一个新数组,用指向第一个数组中的结构/对象的指针填充它,然后用共享指针原子交换指向该数组的指针
- 检查过滤元素的线程只会通过共享指针检查过滤列表。当共享指针改变时,它只会切换到新的列表。假设列表长度不是问题并且适当的原子操作/内存屏障已经到位。
这在 C# 中可能吗?如果不是,那么合适的架构是什么?
解决方案
推荐阅读
- postgresql - 有没有办法使用 order by 将相似的字段排序在一起?
- reactjs - React Flow:无法解析模块 react-native
- angular5 - windowClass 属性或 NgbModalOptions 实际上有什么作用吗?
- html - 搜索导致重绘和性能不佳的滚动原因
- excel - 当在一行中找到 x 时,显示列名
- android - 在选项卡式片段中获取我当前的位置
- html - 在 ul 上使用 flexbox(彼此相邻)
- mule - 试图找到mule esb 3.7.X apikit api文档
- javascript - 如何在同一页面上使用 JavaScript 变量
- python - socket.accept 接受 2 个连接