LINUX.ORG.RU

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 ★★
() автор топика
Ответ на: комментарий от xnix

возможно он оптимизирует "res" в случае с -O2, можно написать
volatile int res;
и все будет хорошо.

ЗЫ

Зачем писать много, если можно мало
while (1==1) -> while (1)
if (res != 0) -> if (res)

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