Как бы один код тестировал и устанавливал поведение без специальной аппаратной инструкции?

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

2 ответа

Решение

Вам не нужно тестировать и устанавливать инструкции, чтобы получить взаимную блокировку исключения, если это то, что вы просите. Дейкстра описал первый известный мне алгоритм взаимного исключения в 1965 году. Название статьи было "Решение проблемы в управлении параллельным программированием", поищите в Google копию рядом с вами. Первоначальный алгоритм не требовал никакой специальной поддержки со стороны аппаратного обеспечения, но предоставление элементарных инструкций в ЦП значительно повышает производительность.

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

Если вам нужен перекрестный арочный способ для этого и вы используете gcc, то вы можете использовать атомарные встроенные функции gcc:

http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html

Вызов этого приведет к машинной инструкции для конкретной аппаратной архитектуры. На тех, кто их не поддерживает, компиляция не удастся. (Я думаю...)

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