字节操作在 C++11 中是原子的?
Operations on byte are atomic in C++11?
那么对 char 的操作是原子的吗?
因此,在线程 A 中我读取 char T,在线程 B 中我写入相同的 char T,这些标准操作是原子的吗?
char a;
#thread A
{
if(a & 0x01)
...
}
#thread B
{
a =0x01;
...
}
# ATOMIC?
谢谢!
根据 C++ 标准,当从多个线程使用同一个变量时,可能会发生并发访问,并且如果至少有一个访问是写入,则这些访问冲突。
冲突的潜在并发访问构成了数据竞争,这是未定义的行为,除非所有此类访问都是原子的。 volatile
救不了你
基本类型在 C++ 标准中所使用的含义内不是原子。您可以使用 std::atomic
模板创建原子对象。
那么对 char 的操作是原子的吗? 因此,在线程 A 中我读取 char T,在线程 B 中我写入相同的 char T,这些标准操作是原子的吗?
char a;
#thread A
{
if(a & 0x01)
...
}
#thread B
{
a =0x01;
...
}
# ATOMIC?
谢谢!
根据 C++ 标准,当从多个线程使用同一个变量时,可能会发生并发访问,并且如果至少有一个访问是写入,则这些访问冲突。
冲突的潜在并发访问构成了数据竞争,这是未定义的行为,除非所有此类访问都是原子的。 volatile
救不了你
基本类型在 C++ 标准中所使用的含义内不是原子。您可以使用 std::atomic
模板创建原子对象。