futex(2) を使ってせっせとmutexとconditionを実装していたら、意外なところに盲点が。 Linux では pthread_mutex と pthread_cond がプロセスを越えられる。移植性は無いようで、Mac OS Xでは動かなかった。 やり方は mmap(2) に MAP_SHARED フラグを渡して2つのプロセス間でメモリ空間を共有しておき、そのメモリを pthread_mutex_t や pthread_cond_t にキャストして使う。ただしアドレスはページサイズの倍数でないとうまくいかない。(※動くかも?) ※追記:pthread_mutex/condはfutexで実装されていたのでした ※追記:これは linux-2.6.22.9 + glibc-2.6.1 での挙動ですが、おそらくバグです。少なくとも linux-2.6.27 + glibc-2.8