Хорошо, тривиальный вопрос. Проблема в том, что каждый ответ, который я нашел здесь, имеет 3/4 противоречивых ответов.
У меня очень простая проблема. У меня есть глобальная переменная с именем ABORT_SIGNAL. На данный момент это объявлено volatile int ABORT_SIGNAL
. Я понимаю, что это не делает то, что я хочу ... что ...
У меня есть две темы, которые могут писать в ABORT_SIGNAL. Он начнется с 0 и переместится на 1 через несколько секунд. Все остальные потоки будут регулярно читать эту переменную, проверяя, установлено ли значение 1.
Достигнут ли следующие цели ....
#include <stdint.h>
atomic_int ABORT_SIGNAL;
...
// When updating the value ...
atomic_store(&ABORT_SIGNAL, someValue);
// When reading the value ...
if (atomic_load_explicit(&ABORT_SIGNAL, memory_order_relaxed))
doSomething()
Другие также предложили мне сделать что-то вроде следующего.
После каждой проблемы записи atomic_thread_fence(memory_order_acq_rel);
и перед каждой проблемой чтения atomic_thread_fence(memory_order_acq_rel);