Как бы один код тестировал и устанавливал поведение без специальной аппаратной инструкции? - PullRequest
0 голосов
/ 20 сентября 2008

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

Ответы [ 2 ]

3 голосов
/ 20 сентября 2008

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

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

0 голосов
/ 20 сентября 2008

Если вы хотите сделать это путем кросс-арки и используете gcc, то вы можете использовать атомарные встроенные функции gcc:

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

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

...