我有一个带有两个线程的单核CPU(ARM Cortex M3,32位)。假设以下情况:是在单核CPU原子上写入变量吗?
// Thread 1:
int16_t a = 1;
double b = 1.0;
// Do some other fancy stuff including starting Thread 2
for (;;) {std::cout << a << "," <<b;}
// Thread 2:
a = 2;
b = 2.0;
我可以处理以下输出:
- 1,1-
- 1,2-
- 2,1
- 2,2-
我可以肯定,输出将永远是那些(1/2)之一,而不使用mutex
或其他锁定机制?更具体地说,这个编译器是依赖的吗? int16
和double
的行为有何不同?
对_atomic_访问使用'std :: atomic'。 –
您的代码具有完全可移植性和独立于编译器的*未定义行为*。所有的实现都可以完全自由地做任何他们想做的事情。 –
@πάνταῥεῖ。不幸的是,由于编译器的限制,我无法访问它(例如,没有C++ 11)。但除此之外,这将是一条路。 –