我试图创建一个结构变量的原子数组。但是我无法为任何数组元素赋值。
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
显示错误(表达式必须具有指针类型)
答案 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如何运作。