void tsemloop(void) { int i; i = 0; while(i < nloops){ if(tsemacquire(&x, 10)){ if((i % 1000) == 0) sleep(10); incr++; i++; semrelease(&x, 1); } else { //print("pid %d timeout\n", getpid()); } } exits(nil); }
long systsemacquire(ulong *arg) { long *addr; ulong ms; Segment *s; validaddr(arg[0], sizeof(long), 1); evenaddr(arg[0]); addr = (long*)arg[0]; ms = arg[1]; if((s = seg(up, (ulong)addr, 0)) == nil) error(Ebadarg); if(*addr < 0) error(Ebadarg); return tsemacquire(s, addr, ms); }