static void eventlock(Lock *l) { // Allocate event if needed. if(l->event == 0) initevent(&l->event); if(xadd(&l->key, 1) > 1) // someone else has it; wait stdcall(WaitForSingleObject, l->event, -1); }
static void eventlock(Lock *l) { // Allocate event if needed. if(l->event == 0) initevent(&l->event); if(runtime·xadd(&l->key, 1) > 1) // someone else has it; wait runtime·stdcall(runtime·WaitForSingleObject, 2, l->event, (uintptr)-1); }
/* initialize mutex and event -------------------------------------------------- * create mutex and event handles * args : none * return : none *-----------------------------------------------------------------------------*/ extern void openhandles(void) { /* mutexes */ initmlock(hbuffmtx); initmlock(hreadmtx); initmlock(hfftmtx); initmlock(hpltmtx); initmlock(hobsmtx); initmlock(hlexmtx); /* events */ initevent(hlexeve); }