InterlockedIncrement против InterlockedIncrementAcquire против InterlockedIncrementNoFence

0

Может ли кто-нибудь объяснить разницу между этими тремя атомными операциями?

  • InterlockedIncrement
  • InterlockedIncrementAcquire
  • InterlockedIncrementNoFence

Кажется, я не могу найти документацию о том, что они означают иначе, чем "использование приобретает symantecs", которое я не понимаю.

Благодарю.

  • 0
    Таким образом, ваш реальный вопрос - «что такое семантика приобретения». Почему бы тебе не спросить это ?
  • 2
    Удивило, что вы пропустили страницу MSDN с подозрением на семантику Acquire и Release .
Теги:
atomic
synchronization

1 ответ

2
Лучший ответ

Исходя из документации,

InterlockedIncrement "генерирует полный барьер памяти " для каждого вызова. Пункты памяти являются специальными инструкциями для вашего процессора, которые не позволяют им выполнять операции переупорядочения, как это обычно бывает, например, операции загрузки могут быть очень дорогими, поэтому с учетом потока операций, которые выглядят как "добавить к A, добавить в A, загрузить B, добавьте в B ", ЦП попытается изменить его как" загрузить B, добавить в A, добавить в A, добавить в B ", чтобы загрузка B успела закончить, прежде чем понадобится.

Однако это может разрушить логику в параллельных программах, поэтому иногда необходимы барьеры памяти. Они дороги: они, как правило, стоят примерно столько же, сколько промаха в кеше.

InterlockedIncrementAcquire пытается использовать " приобретать семантику ", если поддерживается вашей системой, если нет, она возвращается к InterlockedIncrement. Отправляясь от этого сообщения в блоге,

Приобретение семантики предотвращает переупорядочение памяти чтения-чтения с помощью любой операции чтения или записи, которая следует за ней в программном порядке

Таким образом, приобретение семантики - это ограниченный, менее дорогой вид барьера памяти, который полезен только в определенных ситуациях (когда, очевидно, задействованы только чтения).

Наконец, InterlockedIncrementNoFence не создает никакого барьера памяти - он полностью неконтролируемый, и возможно, что это вызовет проблемы с последовательной согласованностью.

  • 0
    Спасибо за подробности. Я думаю, что я действительно не понимаю Symantecs Acquire / Release. Я разместил следующий вопрос здесь: stackoverflow.com/questions/25740313/…

Ещё вопросы

Сообщество Overcoder
Наверх
Меню