#include #include enum { N = 1 * 1000*1000, }; Lock sem1; uchar buffer[128]; Lock sem2; uchar buffer2[128]; void thread1(void) { int i; for(i = 0; i < N; i++){ unlock(&sem2); lock(&sem1); } unlock(&sem2); wait(); exits(""); } void thread2(void) { int i; for(i = 0; i < N; i++){ unlock(&sem1); lock(&sem2); } unlock(&sem1); exits(""); } void main(void) { lock(&sem1); lock(&sem2); switch(rfork(RFPROC|RFMEM)){ case -1: sysfatal("fork: %r"); case 0: thread2(); default: thread1(); } }