マルチスレッドのプログラミング

プロセス間での LWP の使用

プロセス間でロックと条件変数を使用する場合、必ずしもスレッドライブラリを使用しなければならないわけではありません。基本的にはスレッドライブラリを使用するものの、それが望ましくないときは、_lwp_mutex_* インタフェースと _lwp_cond_* インタフェースを次のようなやり方で使用するというアプローチを使用できます。

  1. ロックと条件変数を通常どおり (shmop(2) または mmap(2) を使用して) 共有メモリーに確保します。

  2. 新たに割り当てられたオブジェクトを USYNC_PROCESS タイプとして初期化します。この初期化のために使用できるインタフェースはないので (_lwp_mutex_init(2)_lwp_cond_init(2) は存在しない)、それらのオブジェクトは静的に割り当てて初期化したダミーオブジェクトを使って初期化します。

たとえば、lockp を初期化するには次のようにします。


	lwp_mutex_t *lwp_lockp;
	lwp_mutex_t dummy_shared_mutex = SHAREDMUTEX;
		/* SHAREDMUTEX は /usr/include/synch.h の中で定義されている */
	...
	...
	lwp_lockp = alloc_shared_lock();
	*lwp_lockp = dummy_shared_mutex;

同様に、条件変数については次のようにします。


	lwp_cond_t *lwp_condp;
	lwp_cond_t dummy_shared_cv = SHAREDCV;
		/* SHAREDCV は /usr/include/synch.h の中で定義されている */
	...
	...
	lwp_condp = alloc_shared_cv();
	*lwp_condp = dummy_shared_cv;