#include #include #include "mcslock.h" enum { N = 1 * 1000*1000, }; extern void ·mcslock(Lock *, Qnode*); extern void ·mcsunlock(Lock *L, Qnode *l); Lock sem1; uchar buffer[128]; enum { Cacheline = 64, }; int max(int x, int y) { if(x>y) return x; return y; } void thread(void) { int i; Qnode *q; q = mallocz(max(Cacheline, sizeof q), 1); for(i = 0; i < N; i++){ ·mcslock(&sem1, q); ·mcsunlock(&sem1, q); } } void main(void) { switch(rfork(RFPROC|RFMEM)){ case -1: sysfatal("fork: %r"); case 0: thread(); exits(""); default: thread(); wait(); exits(""); } }