Как можно протестировать и настроить поведение кода без специальной аппаратной инструкции?
-
01-07-2019 - |
Вопрос
Для большинства реализаций, которые я нашел, для этого требуется аппаратная инструкция.Однако я сильно сомневаюсь, что это необходимо (если это так, то я не могу понять, почему...)
Решение
Вам не нужны инструкции по тестированию и установке, чтобы получить блокировку взаимного исключения, если вы об этом спрашиваете.Дейкстра описал первый известный мне алгоритм взаимного исключения в 1965 году.Статья называлась «Решение проблемы управления параллельным программированием», найдите ближайшую к вам копию в Google.Исходный алгоритм вообще не требовал специальной аппаратной поддержки, но наличие атомарных инструкций в ЦП значительно повышает производительность.
Тестирование и установка, атомарная замена и привязка к нагрузке + условие сохранения — все это общие примитивы, предоставляемые процессорами.Все это можно использовать для реализации взаимного исключения, которое затем можно использовать для реализации любой семантики блокировки, которую вы хотите.
Другие советы
Если вам нужен перекрестный способ сделать это и вы используете gcc, вы можете использовать атомарные встроенные функции gcc:
http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html
Их вызов приведет к созданию конкретной машинной инструкции для текущей архитектуры сборки.На тех, которые их не поддерживают, компиляция завершится неудачно.(Я думаю...)