r はリーダー。 w はライター。 lock はロック。 排他制御用のリーダー/ライター・ロックです。
本体は Python のスクリプトです。 従って別途 Python が必要です。 また、この Python は、スレッド対応でないといけません。 (1.5.2 以前はコンパイル時に指定しない限りスレッド非対応です。 逆に 1.6 以降はコンパイル時に指定しない限りスレッド対応版になります。) rwlock.py はスクリプトを入れるディレクトリーに入れて下さい。 (一般ユーザーの場合はホームディレクトリーの下のどこか、 管理者権限で入れる時は、/usr/local の下のどこかになると思います。)
threading モジュールも一緒に import して下さい。 あとは、読み込みが同時に起こっても良いが、書き込みは一度に一つずつ、という当然の状況をこれで捌いて下さい。
spam=0 # これがスレッド間で競合の起こるデータ spamlock=rwlock.RWLock() # ロックの初期化 (thread1) spamlock.acquire('r') # 読み込みモードでロックを取得 if spam==1: # 読み込み print "spam" spamlock.release('r') # 読み込みモードのロックを解放 (thread2) spamlock.acquire('w') # 書き込みモードでロックを取得 spam=1 # 書き込み spamlock.release('w') # 書き込みモードのロックを解放
一応、書き込み要求があると、それ以降は読み込みより書き込みが優先されます。
Bradford Nichols / Dick Buttlar / Jacqueline Proulx Farrell 著「Pthreads プログラミング」オライリー・ジャパン, 1998. を参照して作成しました。 著作権は私こと Fe2+ にあります。 もちろん、自由に使用して下さい。