CXLVI. セマフォ・共有メモリおよび IPC 関数(semaphore)

導入

このモジュールは、System V IPC 関連の関数へのラッパーを提供します。 セマフォ・共有メモリおよびプロセス間通信(IPC)がその中に含まれます。

セマフォは、マシーン上のリソースへの排他的アクセス機能や、 同時にあるリソースを使用することができるプロセスの数を制限するために 使用することができます。

このモジュールは、System V 共有メモリを使用した共有メモリ関数も 提供します。共有メモリは、グローバル変数へのアクセス手段を提供するために 使用することが可能です。別の httpd デーモンおよび (Perl, C, ... のような)他のプログラムさえ、グローバルデータ交換を 提供するこのデータにアクセスすることが可能です。 共有メモリは、同時アクセスに関して安全ではないということを覚えておいて ください。 同期をとるには、セマフォを使用してください。

表 1. Unix OS による共有メモリの制限

SHMMAX共有メモリの最大サイズ。通常は 131072 バイト
SHMMIN共有メモリの最小サイズ。通常は 1 バイト
SHMMNI共有メモリセグメントの最大数。通常は 100
SHMSEGプロセス毎の共有メモリの最大数。通常は 6

メッセージング関数は、他のプロセスと相互にメッセージを送受信する ために使用することができます。 これにより簡単で効率的なプロセス間のデータ交換が可能であり、 Unix ドメインソケットを用いる場合のような設定は不要です。

注意: この拡張モジュールは Windows 環境では利用できません。

要件

外部ライブラリを必要としません。

インストール手順

この関数はデフォルトでは有効になってはいません。System V セマフォの サポートを有効にするには、オプション --enable-sysvsem を指定して PHP を コンパイルする必要があります。System V 共有メモリのサポートを有効にするには、 オプション --enable-sysvshm を 指定して PHP をコンパイルする必要があります。System V メッセージを有効に するには、オプション --enable-sysvmsg を指定して PHP をコンパイル します。

実行時設定

php.ini の設定により動作が変化します。

表 2. セマフォ設定オプション

名前デフォルト変更の可否変更履歴
sysvmsg.value"42"PHP_INI_ALL 
sysvmsg.string"foobar"PHP_INI_ALL 
PHP_INI_* 定数の詳細および定義については 付録I を参照してください。

定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

表 3. System V メッセージ定数

定数変更履歴
MSG_IPC_NOWAITinteger 
MSG_EAGAINinteger5.2.0 以降
MSG_ENOMSGinteger5.2.0 以降
MSG_NOERRORinteger 
MSG_EXCEPTinteger 

目次
ftok --  パス名とプロジェクト ID を、System V IPC キーに変換する
msg_get_queue --  メッセージキューを作成またはそれにアタッチする
msg_receive --  メッセージキューからメッセージを受信する
msg_remove_queue --  メッセージキューを破棄する
msg_send --  メッセージキューにメッセージを送信する
msg_set_queue --  メッセージキューデータ構造体の情報を設定する
msg_stat_queue --  メッセージキューデータ構造体の情報を返す
sem_acquire -- セマフォを得る
sem_get -- セマフォ ID を得る
sem_release -- セマフォを解放する
sem_remove -- セマフォを削除する
shm_attach -- 共有メモリセグメントを作成またはオープンする
shm_detach -- 共有メモリセグメントへの接続を閉じる
shm_get_var -- 共有メモリから変数を返す
shm_put_var -- 共有メモリの変数を挿入または更新する
shm_remove_var -- 共有メモリから変数を削除する
shm_remove -- Unix システムから共有メモリを削除する