Являются ли Win32 InterlockedIncrement и InterlockedExchange атомарными в разных процессах?

MSDN говорит, что взаимосвязанные функции предоставляют простой механизм для синхронизации доступа к переменной, которая используется несколькими потоками.

Я не уверен, работают ли они между потоками нескольких процессов, если переменная находится в общей памяти процессов.

Точно так же, как насчет встроенного компилятора GNU GCC: __sync_add_and_fetch и __sync_lock_test_and_set?

1 ответ

Решение

Этот вопрос по сути два вопроса для двух разных ответов.

  1. За __sync_XXX Встроенные в GCC ответ - да.

Обратитесь к любому онлайн-документу, подобному этому, где описано, что эти встроенные функции обычно создают полный барьер, предотвращая даже внутренние спекулятивные нагрузки внутри конвейера процессора. Каждая многопоточная, многопроцессорная и т. Д. Совместно используемая память безопасна для них.

  1. Я ничего не знаю о функциях Windows InterLockedXXX. Но MSDN знает и говорит:

Потоки разных процессов могут использовать этот механизм, если переменная находится в разделяемой памяти

Так что оба ответа "да".

Другие вопросы по тегам