为原子用户定义结构数组赋值

Assigning values to an array of atomic user defined structures

我正在尝试创建结构变量的原子数组。但是我无法为任何数组元素赋值。

   struct snap {
        int number;
        int timestamp;
    };

atomic<snap> *a_table;

void writer(int i, int n, int t1)
{
    int v, pid;
    int t1;
    a_table = new atomic<snap>[n];
    pid = i;
    while (true)
    {
        v = rand() % 1000;
        a_table[pid % n]->number = v;
        this_thread::sleep_for(chrono::milliseconds(100 * t1));
    }
}

a_table[pid % n]->number = v 行显示错误(表达式必须具有指针类型)

a_table[pid % n] 给你一个 std::atomic<snap>,不是那种类型的指针。

但是,你不能直接做你想做的,你需要使用atomic::store()。所以改变这个:

a_table[pid % n]->number = v;

对此:

snap tmp {v, myTimestamp};
a_table[pid % n].store(tmp, std::memory_order_relaxed);

PS:进一步阅读:std::atomic 的工作原理。