rwlock.py

名前

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+ にあります。 もちろん、自由に使用して下さい。