0;
std::thread t([&]() {
while (is_running || counter.load(std::memory_order_relaxed) > 0) {
counter.fetch_sub(1, std::memory_order_relaxed);
std::cout << "x" << std::endl;
}
});
for (int i = 0; i < 10; ++i) {
if (is_running) {
counter.fetch_add(1, std::memory_order_relaxed);
}
}
is_running = false;
t.join();
Верно ли, что это всегда напечатает x ровно 10 раз?
У меня есть сомнения, что эффект какого-нибудь fetch_add может проявиться во втором треде после is_running = false, и соответственно цикл остановится раньше, чем надо. Так ли это?
у вас чтение и запись is_running которое не атомарно
Обсуждают сегодня