/* - weather-spin.c (spinlock semaphores) - Olamide Adabonyan / Philip Lechowicz - o_mide@yahoo.com / phillech@aol.com */ void Wait(int *semaphore) { asm(" sei"); /* Test and set is atomic */ while((*semaphore)<=0) /* disabled */ { asm(" cli\n" /* disabled */ " nop\n" /* enabled */ " sei"); /* enabled */ } (*semaphore)--; /* disabled */ asm(" cli"); /* disabled */ } /* enabled */ void Signal(int *semaphore) { asm(" sei"); /* increment is atomic */ (*semaphore)++; asm(" cli"); }