パイプに臨界ゾーンがないのはなぜですか?

パイプに臨界ゾーンがないのはなぜですか?

パイプに臨界ゾーンがないのはなぜですか?たとえば、共有メモリから。パイプには連合プロセス間に共通の共通データがあり、連合プロセス間に共通する共有メモリには共通データがある。

答え1

私はあなたが何を求めているのか完全にはわかりません。共有メモリを使用している場合は、作成者と読者が競合しないようにロックを使用する必要がある理由を尋ねているようです。しかし、パイプなしではパイプを持つことはできません。すべてのロック。もちろん、必要なロックの程度は、使用されるデータ構造によって異なります。たとえば、一部のリングバッファにはほとんどロックがありません。

もしそうなら、答えはとても簡単です。パイプは抽象化です。パイプロック(パイプデータ構造に必要な範囲まで)はカーネルに隠されています。

答え2

PIPE_BUFサイズ(通常はメモリページサイズと同じ)未満のパイプ書き込みと読み取りは原子性を保証するため、これを保護するためにユーザー領域同期メカニズムは必要ありません。カーネルはすでにこれを行います。 PIPE_BUFより大きい書き込み/読み取りには同期メカニズムが必要です。実際には、通常、一度に多くのデータがパイプにプッシュされるのを見ることができないため、ミューテックスなどが多用されていることはわかりませんが、PIPE_BUFを超える状況が発生した場合に必要です。

関連情報