Есть ли проблема с «когерентностью кеша» на многопоточном многопользовательстве C ++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Есть ли проблема с «когерентностью кеша» на многопоточном многопользовательстве C ++?

Сообщение Anonymous »

(Изменить: просто чтобы прояснить: вопрос «когерентности кеша» заключается в том, что в том случае, что невозможно использовать атомные переменные.) Кэш и поток-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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»