На другой неделе я написал небольшой класс потоков и односторонний канал сообщений, чтобы обеспечить связь между потоками (два канала на поток, очевидно, для двунаправленной связи). Все отлично работало на моем Athlon 64 X2, но мне было интересно, если бы у меня возникли проблемы, если бы оба потока смотрели на одну и ту же переменную, а локальное кешированное значение для этой переменной на каждом ядре не синхронизировалось.
Я знаю, что ключевое слово volatile заставит переменную обновляться из памяти, но есть ли способ для многоядерных процессоров x86 принудительно синхронизировать кеши всех ядер? Это что-то, о чем мне нужно беспокоиться, или будет изменчивым и правильное использование легких механизмов блокировки (я использовал _InterlockedExchange для установки переменных volatile pipe) обрабатывать все случаи, когда я хочу написать код "lock free" для многоядерных процессоров x86?
Я уже знаю и использовал критические разделы, мьютексы, события и т.д. Я в основном задаюсь вопросом, есть ли встроенные x86, что я не знаю, какой силой или может использоваться для обеспечения согласованности кеша.