Подобный сигнал обычно будет в ответ на некоторые изменения памяти, которые вы хотите, чтобы цель увидела.
Другими словами, вы обычно хотите дать release / приобретает семантику для такой сигнализации.
Это можно сделать либо с помощью memory_order_release
в магазине и memory_order_acquire
при загрузке, либо путем установки release забор до расслабленного хранилища и и приобретение забор после расслабленной нагрузки, чтобы операции памяти, выполненные сигнализатором перед хранением, были видны сигнальщику(см., например, https://preshing.com/20120913/acquire-and-release-semantics/ или стандарт C / C ++).
То, как я помню порядок заборов, заключается в том, что, насколько я понимаю, операции с общей памятью междуЯдра - это, по сути, аппаратно-реализованный буферизованный ввод-вывод, который следует протоколу, , и ограничение на освобождение должно быть похоже на очистку выходного буфера, а ограничение получения - на очистку / синхронизацию входного буфера.
Теперьесли ты смеешьбуфер вывода оперативной памяти нашего ядра до выдачи расслабленного хранилища, затем, когда целевое ядро видит расслабленное хранилище, ему должны быть доступны предыдущие операционные сообщения памяти, и все, что ему нужно, чтобы увидеть эти изменения памяти в своей памятисинхронизировать их с ограждением получения после того, как оно увидит хранилище сигналов.