Я ищу функцию, которая представляет высокоуровневый D интерфейс для атомарного CAS на Intel x86.
Я знаю, что могу сделать это с помощью встроенного ASM (и, если нужно, я сделаю это), но я бы предпочел просто взять код у кого-то другого, если смогу.
Из документации по адресу: http://www.digitalmars.com/d/2.0/overview.html
Встроенный ассемблер Драйверы устройств, высокая производительность системные приложения, встроенные системы, и специализированный код иногда нужно окунуться в язык ассемблера, чтобы получить Работа выполнена. В то время как D реализации не требуется для реализации встроенного ассемблер, это определено и является частью язык. Большая часть кода ассемблера можно справиться с этим, соблюдая нужны для отдельных ассемблеров или DLL. Многие реализации D также поддержка внутренних функций аналогично поддержке С встроенные функции для управления портами ввода / вывода, прямой доступ к специальным плавающим точечные операции и т. д.
Встроенный ассемблер
Драйверы устройств, высокая производительность системные приложения, встроенные системы, и специализированный код иногда нужно окунуться в язык ассемблера, чтобы получить Работа выполнена. В то время как D реализации не требуется для реализации встроенного ассемблер, это определено и является частью язык. Большая часть кода ассемблера можно справиться с этим, соблюдая нужны для отдельных ассемблеров или DLL.
Многие реализации D также поддержка внутренних функций аналогично поддержке С встроенные функции для управления портами ввода / вывода, прямой доступ к специальным плавающим точечные операции и т. д.
Так что теоретически вы можете использовать CMPXCHG напрямую.
Редактировать
Возможно, вы захотите взглянуть на: http://www.dsource.org/projects/tango/browser/trunk/tango/core/Atomic.d?rev=4277
По какой-то причине загрузка занимает некоторое время, но она использует инструкцию CMPXCHG для внутреннего использования, ее переоборудование для ваших целей будет тривиальным.