Я пытаюсь реализовать очередь FIFO Майкла-Скотта из здесь . Я не могу реализовать их решение проблемы ABA. Я получаю эту ошибку.
error: incompatible type for argument 1 of '__sync_val_compare_and_swap'
Для справки, я использую Linux для компиляции на архитектуре Intel. Если вам нужна дополнительная информация о моей настройке, пожалуйста, спросите.
Кажется, что sync_val_CAS
обрабатывает только до 32-битных значений. Поэтому, когда я удаляю их счетчик, который используется для устранения проблемы ABA, все компилируется и работает нормально.
Кто-нибудь знает о соответствующей 64-битной инструкции CAS, которую я должен использовать здесь?
В качестве дополнительного вопроса: есть ли лучшие (более быстрые) реализации очередей FIFO без блокировок? Я наткнулся на это от Нира Шавит и др., что кажется интересным. Мне интересно, видели ли другие подобные попытки? Спасибо.