3

同期にセマフォを使用するのではなく、Linux カーネルで待機キューを使用するのはなぜですか? 同期に待機キューを使用する場合とセマフォを使用する場合の違いは何ですか?

4

1 に答える 1

4

セマフォは、並列プログラミング環境で共通のリソースへの複数のプロセスによるアクセスを制御するための単純ですが有用な抽象化を提供する変数または抽象データ型です。(ウィキペディア

現在、セマフォは特定の実装ではなく、より概念的なものです。

Linuxセマフォのデータ構造の実装では、待機キューを使用します。待機キューがないと、どのプロセスが最初にリソースを要求したかがわからないため、待機時間が非常に長くなる可能性があります。待機キューは公平性を確保し、リソース不足の問題を軽減します。

struct semaphore {
    int count; //+ve or -ve indicates resource free/busy state
    int waking; //number of waiting processes
    int lock ;  /* to make waking testing atomic */
    struct wait_queue *wait; //queued, to prevent starvation, ensure fairness
};

参照

于 2012-10-29T06:35:16.437 に答える