Являются ли Win32 InterlockedIncrement и InterlockedExchange атомарными в разных процессах?
MSDN говорит, что взаимосвязанные функции предоставляют простой механизм для синхронизации доступа к переменной, которая используется несколькими потоками.
Я не уверен, работают ли они между потоками нескольких процессов, если переменная находится в общей памяти процессов.
Точно так же, как насчет встроенного компилятора GNU GCC: __sync_add_and_fetch и __sync_lock_test_and_set?
1 ответ
Этот вопрос по сути два вопроса для двух разных ответов.
- За
__sync_XXX
Встроенные в GCC ответ - да.
Обратитесь к любому онлайн-документу, подобному этому, где описано, что эти встроенные функции обычно создают полный барьер, предотвращая даже внутренние спекулятивные нагрузки внутри конвейера процессора. Каждая многопоточная, многопроцессорная и т. Д. Совместно используемая память безопасна для них.
- Я ничего не знаю о функциях Windows InterLockedXXX. Но MSDN знает и говорит:
Потоки разных процессов могут использовать этот механизм, если переменная находится в разделяемой памяти
Так что оба ответа "да".