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