为原子用户定义结构数组赋值
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 的工作原理。
我正在尝试创建结构变量的原子数组。但是我无法为任何数组元素赋值。
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 的工作原理。