我们可以在C#中进行列表的原子交换吗?

时间:2019-09-11 14:59:54

标签: c# multithreading pointers atomic

有两个列表:第一个包含很多大型对象(大型结构)。

第二个应该只包含第一个列表中经过过滤的对象子集。

有一个线程必须尽可能快地连续通过第二个列表。还有第二个线程进行过滤,因为过滤非常昂贵,我们不想打扰第一个线程。

在C或C ++中,我会这样做:

  • 将结构/对象的平面数组作为第一个列表
  • 将一个指针数组作为第二个列表,并设置一个指向该数组的公共指针,以供两个线程共享
  • 执行过滤的线程将创建一个新数组,在其中填充指向第一个数组中的structs / objects的指针,然后与共享指针原子交换指向该数组的指针
  • 检查已过滤元素的线程将仅通过共享指针检查已过滤列表。更改共享指针后,它将仅切换到新列表。假设列表长度不是问题,并且适当的原子操作/内存障碍已到位。

在C#中完全可能吗?如果没有,什么是合适的架构?

0 个答案:

没有答案
相关问题