我有一个关于C++标准和更一般的计算机体系结构的问题。想象一下下面的代码:
#include <atomic>
#include <thread>
std::atomic<int> a {0};
int main () {
std::thread t1([&a](){
int i = 1;
int ao = a.load();
while(!a.compare_exchange_weak(ao, i));
}), t2([&a](){
int i = 1;
int ao = a.load();
while(a.compare_exchange_weak(ao, i));
});
t1.join();
t2.join();
return 0;
}
我有两个问题:
-
理论上,按照标准,这会导致线程不足吗?
-
第二,在x86体系结构上,这会导致饥饿吗?我能相信它吗?