У меня вопрос как к стандарту 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 привести к голоданию?Можно на это положиться или нет?