2012-06-15 13 views

答えて

14

<sys/sem.h>は、XSI(もともとのUnix System V)セマフォのインタフェースを提供します。これらは基本的なPOSIX標準の一部ではありません(XSIオプションに含まれていますが、これは主に従来のUnixとの互換性のためです)、廃止予定/推奨されていないと考えられているプログラマも多く、POSIXは推奨していないと考えています。

アプリケーションの用途

POSIX Realtime Extensionは、プロセス間通信用の代替インタフェースを定義しています。 IPCを使用する必要があるアプリケーション開発者は、XSIプロセス間通信で説明したIPCルーチンを使用するモジュールを代替インターフェイスを使用するように簡単に変更できるように、アプリケーションを設計する必要があります。

XSIセマフォのメリットとデメリットは、インターフェイスがカーネル空間オブジェクトとして動作するためであることです。これがもたらす主な利点は、プロセスが終了した場合や予期せず終了した場合にカーネルが操作を取り消すことができるように、それらを設定できることです。主なコストは、すべての操作がカーネル空間へのラウンドトリップである、すなわち非常に遅いということです。それらを使用するためのインターフェイスも非常に鈍く学習するのが難しく、必然的にプロセス共有リソースです。つまり、共有名前空間とリソースクリーンアップの問題に対処する必要があります。

<semaphore.h>は、プロセスがスリープ状態になるためにカーネルを呼び出す場合を除いて、ユーザー空間で完全に実装できるように設計されたPOSIXセマフォを定義します。それらのパフォーマンスは、最適なものに近いものでなければなりません(つまり、自分自身を叩くことはほとんど不可能です)が、XSIセマフォほど機能的ではありません。 POSIXセマフォには、プロセスローカルセマフォ(マルチスレッド環境で使用する場合、場合によってはシングルスレッドプログラムのシグナルハンドラ)やプロセス共有セマフォを使用するかどうか、後者の場合は、システムが名前で共有名前空間に割り当てを処理するようにするか、共有メモリーを自分で取得して共有メモリーで初期化するかを選択できます。

4

これらは、互いに同じではなく、2つの異なる実装であり、異なる機能セットを提供します。 semaphore.hはPOSIX実装で、sys/sem.hはsysVの実装です。 POSIXはconsideredで、軽量で広く使用されています。

関連する問題