В C ++ у меня есть два потока.
Каждый поток сначала выполняет хранилище на одной переменной, затем нагрузку на другую переменную, но в обратном порядке: < /p>
std::atomic please_wake_me_up{false};
uint32_t cnt{0};
void thread_1() {
std::atomic_ref atomic_cnt(cnt);
please_wake_me_up.store(true, std::memory_order_seq_cst);
atomic_cnt.load(std::memory_order_seq_cst); //
Если все четыре атомных доступа выполняются с последовательной последовательности, гарантируется, что по крайней мере один поток увидит хранилище другого потока при выполнении нагрузки. Это то, чего я хочу достичь. < /P>
Поскольку futex < /code> -syscall должен выполнить нагрузку переменной, которую она работает внутри, мне интересно, могу ли я опустить (дублированную) нагрузку прямо перед Syscall. Syscalls в целом действуют как полные барьеры памяти? Есть ли какая-либо гарантия, что нагрузка внутри Syscall происходит с последовательной последовательности? Я был бы заинтересован в x86_64 и ARM64.
Подробнее здесь: https://stackoverflow.com/questions/794 ... tially-con