<semaphore.h>
とに含まれる機能の違いは何<sys/sem.h>
ですか?ヘッダーなどを使用したほうがよい状況はありますか?
2 に答える
<sys/sem.h>
XSI (元は Unix System V) セマフォのインターフェイスを提供します。これらは基本的な POSIX 標準の一部ではありません (主に従来の Unix 互換性のための XSI オプションに含まれています)。また、これらは廃止予定/非推奨とは見なされていませんが、多くのプログラマーは非推奨と見なしており、POSIX は次のようにアドバイスしています。
アプリケーションの使用
POSIX Realtime Extension は、プロセス間通信用の代替インターフェイスを定義します。IPC を使用する必要があるアプリケーション開発者は、XSI プロセス間通信で説明されている IPC ルーチンを使用するモジュールを簡単に変更して代替インターフェイスを使用できるようにアプリケーションを設計する必要があります。
XSI セマフォの長所と短所は、それらがカーネル空間オブジェクトであり、インターフェイスの動作方法に起因するものであるということです。これにより得られる主な利点は、プロセスが予期せず終了または強制終了された場合にカーネルが操作をバックアウトできるように設定できることです。主なコストは、すべての操作がカーネル空間への往復であること、つまり非常に遅いことです。それらを使用するためのインターフェースも非常にわかりにくく、習得が難しく、必然的にプロセス共有リソースになります。つまり、共有名前空間とリソースのクリーンアップの問題に対処する必要があります。
<semaphore.h>
POSIX セマフォを定義します。これは、プロセスがカーネルを呼び出してスリープ状態になる競合する場合を除いて、完全にユーザー空間に実装できるように設計されています。それらのパフォーマンスは最適に近いはずです (つまり、独自のローリングを打ち負かすことはほとんど不可能です) が、XSI セマフォほど機能的ではありません。POSIX セマフォでは、プロセス ローカル セマフォ (マルチスレッド環境で使用する場合や、場合によってはシングル スレッド プログラムのシグナル ハンドラで使用する場合) を使用するか、プロセス共有セマフォを使用するかを選択することもできます。後者の場合、共有名前空間への名前による割り当てをシステムに処理させるか、自分で共有メモリを取得して共有メモリで初期化するかを選択できます。
それらは互いに同じ/交換ではなく、2 つの異なる実装であり、異なる機能セットを提供します。semaphore.h
は posix 実装であり、sys/sem.h
sysV の実装です。POSIX は軽量で広く使用されていると考えられています。