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