http://search.cpan.org/~andya/IPC-ShareLite-0.17/lib/IPC/ShareLite.pm の翻訳 (DESCRIPTIONのみ)。
new($key, $create, $destroy, $exclusive, $mode, $flags, $size)
IPC::ShareLite のコンストラクタは、位置パラメタスタイルと名前付きパラメタスタイルの両方の引数を受けつける。
$key
は整数値で、プロセス間の連携に使われる。すべてのプロセスが同じ$key
を使用することでプロセス間通信を実現する。また、$key
には4文字のストリングも使用できるが、それは自動的に整数に変換される。$key
がundef
の場合、その共有メモリは他のプロセスからアクセスできない。
$create
は共有メモリセグメントがなけれを作成するかどうかを指定する。1
, 'yes'
, 0
または 'no'
を受け入れる。
$destroy
は、オブジェクトが破棄されたときに共有メモリセグメントとセマフォも削除するかどうかを指定する。1
, 'yes'
, 0
または 'no'
を受け入れる。
訳注: 子プロセスの終了による不意のスコープアウトに注意
$exclusive
が true
ならば、共有メモリセグメントがすでに存在するときインスタンス化に失敗する。1
, 'yes'
, 0
または 'no'
を受け入れる。
$mode
は共有メモリとセマフォへのアクセス権を指定する。その規定値は0666
である。
$flags
は共有メモリとセマフォのフラグを指定する。定数 IPC_CREAT
, IPC_EXCL
と IPC_PRIVATE
をインポートできる。
$size は 共有メモリのセグメントサイズをバイトで指定する。規定値は 65,536 バイトで、これはかなり可搬性がある。たとえばLinuxは4メガバイトセグメントをサポートする。
このコンストラクタはエラー発生時にcroakする。
store($scalar)
このメソッドは任意の長さの$scalar
を共有メモリにストアする。データ長が変化できるよう、共有メモリセグメントは自動的に獲得・開放される。データ量の制限は、カーネルコンパイル時の最大共有メモリページ(SHMALL)とセグメント最大数(SHMMNI)による。
このメソッドはエラー発生時に例外を送出する。
fetch
このメソッドは前もって共有メモリにストアされたデータを返す。データがストアされていなかったときには空文字列を返却する。
このメソッドはエラー発生に例外を送出する。
lock($type)
複数のプロセスは任意の時間に共有ロックを保持することができる。一つ以上のプロセスが共有ロックを保持しているときに排他ロック獲得しようとすると、それら(共有ロック)すべてが終了するまで(排他ロックが)ブロックされる。
いずれのロックも、ノンブロッキングを指定することができる。
$share->lock(LOCK_EX | LOCK_NB);
$share->lock(LOCK_SH | LOCK_NB);
もしロック獲得のために待機しなければならないとき、ノンブロッキングロック要求は0
を返す。
ノート: これらのロックは flock のようなアドバイザリロックであり、すべての協働プロセスが共有メモリへのアクセスを調整しなければならないことに注意する。詳細については、flock() を参照すること。
ロックは fork で継承される。つまりこれは、2つのプロセスが同時に排他ロックを保有できてしまうことを意味する。やるなよ絶対にやるなよ。
定数 LOCK_EX
, LOCK_SH
, LOCK_NB
と LOCK_UN
をインポートできる:
use IPC::ShareLite qw( :lock );
あるいはFcntlモジュールの定数も使用可能である。
unlock()
lock(LOCK_UN)
と同じ。
verison
各共有は、書き込み毎に増加するバージョン番号を持っている。共有が作成されると、バージョン番号は1となる。
key
共有キーを取得する
exclusive
exclusiveフラグを取得する
flags
フラグを取得する
mode
modeを取得する
size
セグメントサイズを取得する
num_segments
共有のセグメント数を取得する。共有のメモリ使用量は、おおよそ次のようになる。
my $usage = $share->size * $share->num_segments;
メモリ使用量 $usage
はセグメント境界で切り上げられる。
destroy
destroyフラグを取得する