HP-UX General
1824218 メンバー
3186 オンライン
109669 解決策
新規ポスト

セマフォについて

 
keijirou
頻繁なアドバイザー

セマフォについて

いつも参考にさせていただいてます。

早速ですが、質問させてください。

★セマフォロックについて

 <環境>

 マシン:B2600

 OS:HP-UX11i

    Xウィンドウ有り

    CDE環境なし

 複数のアプリケーションが、ひとつのセマフォのロック解除待をしています。

 その状態で、ロックが解除された場合、次にセマフォを獲得できるのはどのAPでしょうか?

   1.semopを発行した順に獲得できる(先入れ先出し方式)?

   2.それとも、順序性は守られずにランダムに獲得?

回答よろしくおねがいします

5件の返信5
Fu_Hi
頻繁なアドバイザー

セマフォについて

簡単に言ってしまえば 次にロックを取れたAPです。

アンロック待ちでループしている複数のAPで運良く?

ロックが外れている時に最初にロックをとりに言ったAPとなります。

一定の規則で順番にAPを切り替えたい場合はロックに種類を持たせるか、メッセージ等で通知しする、共有メモリ上に処理終了?処理可能フラグを持たせるなどの工夫が必要になるのではにでしょか。
nadachi
レギュラーアドバイザー

セマフォについて

> 複数のアプリケーションが、一つのセマフォの

> ロック解除待ちをしています。その状態で、

> ロックが解除された場合...

こういうことでしょうか。以下のような

動作がこの順番で行われたとします。

process A ... セマフォXをlockする。

process B ... セマフォXをlock しようとするが、

       すでにlockされているのでsleep

process C ... セマフォXをlockしようとするが、

       すでにロックされているのでsleep

process D ... 上に同じ。

 この時点でセマフォX の上でprocessが3つ、

lock待ちで sleep しています。

 次に、process A がセマフォX を unlock

したら何が起こるか? ですが、一応試したところ、

process Bが起き上がって来ました。

 process BがセマフォXを unlock すると

process C が起き上がってきました。

process CがセマフォXを unlockすると

process Dが起き上がってきました。

ということで、semop()を発行してsleepに

なった順で起き上がってきています。

keijirou
頻繁なアドバイザー

セマフォについて

fujisawa_h様、nadachi様返信ありがとうございます。

nadachi様の試されたとおり、当方でも同じようにNOWAITでロックをして実験をしたところ、同様の結果(ロック待ちを行った順番)になりました。

ちなみに、実験では望んだ結果が得られましたが、この事象(順番にロックを獲得できる)について、確証(manやドキュメント)のある記述はないでしょうか?
oops
貴重なコントリビューター

セマフォについて

Semaphore だけの話しではなく、sleep()(sleep queue)、wakeup() という hpux kernel の実装の話しになると思うので、man には記載がないと思います。hpux に限らず、大抵の UNIX の場合、基本的に wakeup する対象を、sleep queue に入った順番に探すと思いますので、keijirouさんの実験通り、通常 FIFO 的な順序で wakup() される、つまり、lock が獲得できると思います。ドキュメントに関しては、 hp のdevelopers siteで検索してみると、何かいいのがあるかもしれません。後は市販の Internal 本でしょうか。
keijirou
頻繁なアドバイザー

セマフォについて

oops様、返信ありがとうございます。

ご指摘いただいたサイトや書籍を調べてみたいと思います。

>>sleep queue に入った順番に探すと思いますので

この辺をキーに調べてみます。