аппаратная поддержка для атомарной выборки и добавления против выборки и / или - PullRequest
0 голосов
/ 12 января 2012

Кажется, fetch_add - это win (см. Также комментарии к комментариям) против цикла CAS на процессорах, которые поддерживают оба.

При переключении битов сброса на биты можно использовать битовую операцию или операцию сложения. Результаты будут идентичны. Я ожидаю, что производительность для каждого будет равной. Таким образом, решение о том, какую операцию использовать, будет зависеть от различий в аппаратной поддержке операций (если есть, я не смог найти какую-либо информацию об относительной поддержке процессора).

Есть ли в этом случае причина отдавать предпочтение одному другому?

1 Ответ

1 голос
/ 12 января 2012

Вместо кодирования для конкретной архитектуры процессора вы можете захотеть использовать встроенный компилятор.Например, GCC и Clang поддерживают несколько встроенных элементов, один из которых __sync_fetch_and_or.

Начиная с Visual Studio 2005, Visual C ++ поддерживает _InterlockedOr на всех архитектурах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...