Хочу реализовать самый примитивный мьютекс.
Написал такой код: 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");