在这种情况下,一个易变的变量是否足够?

时间:2016-06-27 10:43:12

标签: c++ multithreading

说我有这两个功能:

int* bigBuffer = new int[1024];
std::atomic<int> pos1 = 0;
volatile int pos2 = 0;

void push1(int value) {
    int offset = pos1.fetch_add(1, std::memory_order_acq_rel);
    bigBuffer[offset] = value;
}

void push2(int value) {
    int offset = pos2++;
    bigBuffer[offset] = value;
}

然后我有一个多编写器场景,其中许多线程调用push1或push2来存储他们的数据。数据的顺序并不重要,我主要担心的是速度。

从我的有限测试中,push2更快,数据似乎正确。我会在路上遇到问题吗?

0 个答案:

没有答案