2012-02-20 8 views
7

クラスでは、スレッドでの作業を行うためにセマフォを使用する必要がありました。 sem_initの プロトタイプ(およびヘッダーファイル)は、以下である:(* SEM、INTのpshared、unsigned int型の値をsem_t)sem_init(...):valueパラメータとは何ですか?

のint sem_init。

しかし、私は値の変数が使用されているか分かりません。 opengroup.orgによると:

値は

にセマフォを設定するための初期値である「値が値である...」どのようにヘルプが、それは何のために使用されているのでしょうか?

答えて

2

sem_init()は、値(最後のパラメータ)でポイントされたセマフォ(最初のパラメータ)を初期化し、最後に、これが実際にあなたが求めていたものだと信じています。 pshared == 1の場合、セマフォをforkすることができます。

EDIT:sem_wait(sem_t * sem)などの関数を使用して、セマフォをポイントする値を減らすため、セマフォにはint値があります。それが否定的であれば、ブロックする。

+1

「価値がある」とはどういう意味ですか?それはロック/ロック解除されていることを意味しますか?セマフォの可能な問い合わせ数を指定していますか? – SomethingSomething

1

私たちは私たちがコードにセマフォを使用する方法とそれを同期させる必要があると思う sem_init(* SEM、int型のpshared、unsigned int型の値をsem_t)

で「値」を理解するために: 私たちが望むときsem_wait(& mutex)を呼び出し、他のスレッドのsem_wait(& mutex)を実行するように通知する場合は、sem_post(& mutex)を呼び出す必要があります。 しかし、他のどのスレッドもsem_post(& mutex)を最初に(システム初期化時)呼び出さない場合、sem_wait(& mutex)はどうすればよいですか?他のスレッドがsem_post(& mutex)を呼び出すのを待つか待つべきですか? 答えはsem_init()の "value"にあります。ゼロの場合は、他のスレッドがsem_post()を一度呼び出すのを待たなければならないことを意味します。それが1の場合、sem_wait()を初めて呼び出すと同時に渡されますが、sem_wait()は待機します(sem_postが呼び出されていない場合)。 sem_init()の値は、sem_post()を使わずに実際に何も待たずにsem_wait()を何回実行できるかを意味します。 そして、我々は(sem_waitを考慮することができる)として:値が別のスレッドによって大きく0より/

一方(値= 0 <)を に変更されるまで、デッドロックが待機 /{}

value-- ;

sem_post()を次のように見なします。

値++;

0

セマフォ値は、スレッド間で共有できる共有リソースの数を表します。値が0より大きい場合、sem_waitを呼び出すスレッドは待機する必要はありません。値を1だけ減らして共通リソースにアクセスします。 sem_postはリソースをプールに戻します。したがって、値を1だけインクリメントします。値が0の場合、誰かがsem_postを実行するまで待機します。

関連する問題