/* ****************SPIN.C******** Jonathan W. Valvano Feb 26, 1997 Spinlock semaphores */ void Wait(int *semaphore){ asm(" sei"); /* Test and set is atomic */ PORTC|=0x10; while((*semaphore)<=0){ /* disabled */ asm(" cli\n" /* disabled */ " nop\n" /* enabled */ " sei");} /* enabled */ (*semaphore)--; /* disabled */ PORTC&=0xEF; asm(" cli"); /* disabled */ } /* enabled */ void Signal(int *semaphore){ asm(" sei"); /* increment is atomic */ PORTC|=0x20; (*semaphore)++; PORTC&=0xDF; asm(" cli"); }