Для большинства применений, которые мне нужны, требуется аппаратная инструкция для этого. Однако я сильно сомневаюсь, что это необходимо (если это так, я не могу понять, почему ...)Как бы один тест кода и установить поведение без специальной аппаратной инструкции?
ответ
Вам не нужен тест и задайте инструкцию для блокировки взаимного исключения, если это то, что вы просите , Dijkstra описал первый алгоритм взаимного исключения, о котором я знаю, в 1965 году. Название статьи было «Решение проблемы при параллельном программировании», поиск Google для копии рядом с вами. Первоначальный алгоритм не требовал никакой специальной поддержки от аппаратного обеспечения вообще, но предоставление атомной инструкции в CPU резко улучшает производительность.
Тестирование и настройка, атомная свопа и связанная с нагрузкой + условное хранилище - все это обычные примитивы для обеспечения ЦП. Все они могут использоваться для реализации взаимного исключения, которые затем могут быть использованы для реализации любой секретной семантики, которую вы хотите.
Если вы хотите кросс-арочный способ сделать это, и с помощью GCC, то вы можете использовать атомные внутренние команды ССЗ:
http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html
Вызов этих приведет к аппаратной конкретной машинной команды для текущей архитектуры сборки. На тех, кто их не поддерживает, компиляция завершится неудачей. (Я думаю ...)
http://www.dis.uniroma1.it/~baldoni/p569-dijkstra.pdf – Chris 2008-09-20 06:38:41