LINUX.ORG.RU

Атомарная ассемблерная вставка в gcc

 , , ,


2

6

Хочу реализовать самый примитивный мьютекс.

Написал такой код: http://pastebin.com/bqX9xKtQ
Компилять так: `gcc -pthread ./lock.c -o lock.elf -lpthread && ./lock.elf`

Прочитал статью в википедии: Тыц

XCHG — Операция обмена между памятью и регистром. Выполняется атомарно на x86-процессорах
Ассемблерная вставка соответствующей атомарной инструкции.

Я так понимаю что мой mutex_lock не является атомарным, а вместо него надо бы заюзать что-то вроде

__asm
{
    mov eax, 1
    xchg eax, mx
}

Так вот, как В ЭТОМ ВАШЕМ GCC С ЕГО ИНОПЛАНЕТНЫМ СИНТАКСИСОМ НАПИСАТЬ ТО ЖЕ САМОЕ?

Для тех кто не в курсе синтаксиса gcc:

asm volatile ( "rdtsc\n\t"   
               "shl $32, %%rdx\n\t"  
               "or %%rdx, %0"        
               : "=a" (msr)
               :
               : "rdx");

★★★★★
Ответ на: комментарий от kirk_johnson

А можно перехитрить ядро и сделать кооперативную многозадачность, как на православной Mac OS Classic, чтобы хрен оно регистры у проги отобрало, пока сама не отдаст? Способы, требующие доступа в Ring 0, сойдут тоже.

anonymous
()
Ответ на: комментарий от anonymous

чтобы хрен оно регистры у проги отобрало

anonymous (11.02.2017 2:03:39)

ты, видимо, был нетрезв, бро

anonymous
()
Ответ на: комментарий от kirk_johnson

тогда ему нужен freedos. но причём здесь регистры?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.