Apache::Session::Lock::Semaphoreモジュール

by Hippo2000(2000/8/8)

日本語チョウ訳シリーズ Apache::Session::Lock::Semaphore モジュールなのです。



名前

Apache::Session::Lock::Semaphore - セマフォにより相互排他を提供


概要

 use Apache::Session::Lock::Semaphore;

 my $locker = new Apache::Session::Lock::Semaphore;

 $locker->acquire_read_lock($ref);
 $locker->acquire_write_lock($ref);
 $locker->release_read_lock($ref);
 $locker->release_write_lock($ref);
 $locker->release_all_locks($ref);

説明

Apache::Session::Lock::SempahoreはApache::Session.のロックのインターフェースを完全に満たします。相互排他はシステム・セマフォとIPC::Semaphoreモジュールを通して実現されます。


コンフィグレーション

このモジュールはいくつのセマフォを使うのか、なんというセマフォ・キーを使うのかを知らなければなりません。セマフォの数はパフォーマンスに影響を与えます。セマフォを増やすほど、ロックの衝突は少なくなります。プラットフォームが許す限り最大の数のセマフォを使うべきです。標準のNetBSD、OpenBSDそしてSolarisシステムでは、これはおそらく16です。Linux2.2ではこれは32です。このモジュールはオペレーティングシステムを元に数を答えようとしますが、自分自身で設定した方がより安全です。

セマフォの数を設定するために、通常のApache::Sessionで引数を渡す必要があります。引数の名前はNSemsです。そしてその値は2の累乗の整数です。例:

 tie %s, 'Apache::Session::Blah', $id, {NSems => 16};

このパッケージが使うセマフォ・キーを設定する必要もあるかもしれません。デフォルトではそれはキー31818を使います。引数SemaphoreKeyを使って、これを変更することが出来ます:

 tie %s, 'Apache::Session::Blah', $id, {NSems => 16, SemaphoreKey => 42};

問題点

このパッケージを使うと、頻繁にぶつかる2、3の問題があります。

引数が正しくないというメッセージを取得したならば、それは通常、あたなの要求したセマフォの番号がシステムにとって幸せでなかったことを意味します。セマフォの番号を小さくしてください。このパッケージが作成する

セマフォ・ブロックはシステムがリブートされるまで残ります。そのため8のセマフォを要求し、次に16のセマフォを要求すると、それはうまく行きません。欲しくないセマフォブロックを調べ、削除するため、システム・コマンド ipcsとipcrmを使ってください。


作者

(原文のまま)

This module was written by Jeffrey William Baker <jwbaker@acm.org>.


参考資料

Apache::Session


ホーム Perlの小技 Apache::Session

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。