(Изменить: просто чтобы прояснить: вопрос «когерентности кеша» заключается в том, что в том случае, что невозможно использовать атомные переменные.) Кэш и поток-2 запускаются на Core-N, использует эту переменную, и он смотрит на еще одну копию, которая находится в памяти?#include
#include
#include
std::atomic_bool g_exit{ false }, g_exited{ false };
using namespace std::chrono_literals;
void fn()
{
while (!g_exit.load(std::memory_order_acquire))
{
// do something (lets say it takes 1-4s, repeatedly)
std::this_thread::sleep_for(1s);
}
g_exited.store(true, std::memory_order_release);
}
int main()
{
std::thread wt(fn);
wt.detach();
// do something (lets say it took 2s)
std::this_thread::sleep_for(2s);
// Exit
g_exit.store(true, std::memory_order_release);
for (int i = 0; i < 5; i++) { // Timeout: 5 seconds.
std::this_thread::sleep_for(1s);
if (g_exited.load(std::memory_order_acquire)) {
break;
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/715 ... on-windows