从另一个线程

时间:2016-06-22 02:54:39

标签: c++ arrays multithreading c++14

我有以下情况。

我有一个写入数组的线程。 写入该数组后,我需要读取该数组。在编写数组之后读取并且我可以通过另一种方式保证(这意味着我不需要条件变量,但只是在读取"刷新"数组的内容时)。稍后从另一个线程读取该数组。

编辑:此外,写入将在不同时间发生,阵列不会一次写入。

我需要读取数组的全部内容,所有条目都已刷新,并且读取时的实际值。现在,值不会刷新。

同步这个的最佳方法是什么?

  • 互斥?
  • 原子
  • 围栏?

我不确定如何做到这一点。我知道单个变量的互斥量就足够了,但这是一个数组。我不确定这样做的正确方法是什么。 我不知道怎么做:锁?

2 个答案:

答案 0 :(得分:2)

存在一个基本问题,即数组无法以原子方式写入和读取。在不阻塞编写器的情况下,读者可能会竞争,以便读者可以观察到部分更新的数组。

一种解决方案是使用单生成器 - 单消费者环形缓冲区,其元素是指向这些数组的指针。这样,作者和读者不会竞争写入/读取相同的数组,并且读者只能观察到一致的数据。

答案 1 :(得分:1)

如果我正确理解了这个问题,你知道在另一个帖子改变了值之后你读了一些值,但是你没有看到这个改变。

实际上,如果没有某些同步机制,您的阅读线程将无法保证读取线程的更新值(您可以阅读更多here)。

可行的解决方案是使用原子变量,例如,如果你有一个int数组,将它改为原子数组

std::atomic<int> arr[4];