将值分配给原子用户定义的结构数组

时间:2017-10-04 18:15:44

标签: c++ pointers struct compiler-errors atomic

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

   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显示错误(表达式必须具有指针类型)

1 个答案:

答案 0 :(得分:2)

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如何运作。