PHPプロセス通信ベースの信号量と共有メモリ通信
2495 ワード
プロセス間で誰が先に実行するかは確定していないため、カーネルのプロセススケジューリングアルゴリズムに依存し、複雑です.これにより、マルチプロセスが同じ時間に共有メモリに同時にアクセスし、予期せぬエラーを引き起こす可能性があります.信号量という名前はわけがわからないが、英語の原意を見ると理解しやすい.
semaphore英[ˈseməfɔ:(r)]vt.は信号を出して、旗語を打つ.
指揮官の役割に似ている.
次に、次の擬似コード信号量の使用を見てみましょう.
1、信号量一意識別子の作成
2、信号量リソースIDの作成
3、受信信号量
4、解放信号量
5、廃棄信号量
上品でない例を挙げると、この信号量の生活の中での使い方を理解しやすくなります.理解してから、私たちのプログラミング分野に適用することができます.ある会社にはトイレが一つしかありません.では、誰かがトイレに行くときは、トイレが使用されていることを示す鍵(信号量)を取得します.コードは次のとおりです.
では、従業員がトイレに行った後、鍵を開けて鍵(信号量)を解放し、今他の人に使用できるようにする必要があります.コードは次のとおりです.
簡単なロックで、現在のトイレ(共有メモリ)が使用できるかどうかを知ることができます.この例は見栄えが悪いが,問題を説明した.このブログも味のあるブログで大変でした...サンプルコードは次のとおりです.
semaphore英[ˈseməfɔ:(r)]vt.は信号を出して、旗語を打つ.
指揮官の役割に似ている.
次に、次の擬似コード信号量の使用を見てみましょう.
1、信号量一意識別子の作成
$ftok = ftok(__FILE__, 'a');
2、信号量リソースIDの作成
$sem_resouce_id = sem_get($ftok);
3、受信信号量
sem_acqure($sem_resource_id);
4、解放信号量
sem_release($sem_resource_id);
5、廃棄信号量
sem_remove($sem_resource_id);
上品でない例を挙げると、この信号量の生活の中での使い方を理解しやすくなります.理解してから、私たちのプログラミング分野に適用することができます.ある会社にはトイレが一つしかありません.では、誰かがトイレに行くときは、トイレが使用されていることを示す鍵(信号量)を取得します.コードは次のとおりです.
sem_acqure($sem_resource_id);
では、従業員がトイレに行った後、鍵を開けて鍵(信号量)を解放し、今他の人に使用できるようにする必要があります.コードは次のとおりです.
sem_release($sem_resource_id);
簡単なロックで、現在のトイレ(共有メモリ)が使用できるかどうかを知ることができます.この例は見栄えが悪いが,問題を説明した.このブログも味のあるブログで大変でした...サンプルコードは次のとおりです.
0) {
foreach ($child_list as $key => $pid) {
$status = pcntl_waitpid($pid, $status);
if ($status > 0 || $status == -1) {
unset($child_list[$key]);
}
}
sleep(1);
}
$count = shm_get_var($shm_id, SHARE_KEY);
echo " $count ".PHP_EOL;
//
sem_remove($signal);
shm_remove($shm_id);
shm_detach($shm_id);