#include #include void _xinc(uint*); void _xdec(uint*); enum { N = 1<<30, }; void loop(void) { uint i; for(i = 0; i < N; i++) ; } void loopxinc(void) { uint i, x; for(i = 0; i < N; i++){ _xinc(&x); _xdec(&x); } } void looplock(void) { uint i; static Lock l; for(i = 0; i < N; i++){ lock(&l); unlock(&l); } } void timing(char *s, void (*f)(void)) { uvlong t[2]; t[0] = nsec(); f(); t[1] = nsec(); fprint(2, "%s\t%llud nsec/call\n", s, (t[1] - t[0])/(uvlong)N); } void main(void) { nsec(); timing("loop", loop); timing("loopxinc", loopxinc); timing("looplock", looplock); exits(""); }