static inline void acquire_spinlock( volatile unsigned int *lock ) { int res = 0; while ( 1==1 ) { asm volatile ( "lock btsl $0x0, (%1)\n" "setnc %0\n " : "=g" (res) : "p" (lock) ); if ( res != 0 ) break; asm ( "pause" ); } } main(){ int k=0; acquire_spinlock(&(k)); exit(0); } xnix ★★ (29.05.06 23:16:05 MSD) автор топика Показать ответ Ссылка
Ответ на: комментарий от xnix 29.05.06 23:16:05 MSD возможно он оптимизирует "res" в случае с -O2, можно написать volatile int res; и все будет хорошо. ЗЫ Зачем писать много, если можно мало while (1==1) -> while (1) if (res != 0) -> if (res) fghj ★★★★★ (29.05.06 23:45:03 MSD) Ссылка