LoginSignup
1

More than 5 years have passed since last update.

IPC::ShareLite のドキュメント翻訳 (DESCRIPTIONのみ)

Posted at

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文字のストリングも使用できるが、それは自動的に整数に変換される。$keyundef の場合、その共有メモリは他のプロセスからアクセスできない。

$createは共有メモリセグメントがなけれを作成するかどうかを指定する。1, 'yes', 0 または 'no' を受け入れる。

$destroy は、オブジェクトが破棄されたときに共有メモリセグメントとセマフォも削除するかどうかを指定する。1, 'yes', 0 または 'no' を受け入れる。

訳注: 子プロセスの終了による不意のスコープアウトに注意

$exclusivetrue ならば、共有メモリセグメントがすでに存在するときインスタンス化に失敗する。1, 'yes', 0 または 'no' を受け入れる。

$modeは共有メモリとセマフォへのアクセス権を指定する。その規定値は0666である。

$flagsは共有メモリとセマフォのフラグを指定する。定数 IPC_CREAT, IPC_EXCLIPC_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_NBLOCK_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フラグを取得する

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1