Функция D с использованием x86 CMPXCHG Compare-and-swap - PullRequest
3 голосов
/ 05 марта 2009

Я ищу функцию, которая представляет высокоуровневый D интерфейс для атомарного CAS на Intel x86.

Я знаю, что могу сделать это с помощью встроенного ASM (и, если нужно, я сделаю это), но я бы предпочел просто взять код у кого-то другого, если смогу.

1 Ответ

4 голосов
/ 05 марта 2009

Из документации по адресу: http://www.digitalmars.com/d/2.0/overview.html

Встроенный ассемблер

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

Многие реализации D также поддержка внутренних функций аналогично поддержке С встроенные функции для управления портами ввода / вывода, прямой доступ к специальным плавающим точечные операции и т. д.

Так что теоретически вы можете использовать CMPXCHG напрямую.


Редактировать

Возможно, вы захотите взглянуть на: http://www.dsource.org/projects/tango/browser/trunk/tango/core/Atomic.d?rev=4277

По какой-то причине загрузка занимает некоторое время, но она использует инструкцию CMPXCHG для внутреннего использования, ее переоборудование для ваших целей будет тривиальным.

...