OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

セマフォについて

  • 暇なときにでも
  • 質問No.106234
  • 閲覧数1910
  • ありがとう数2
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 50% (3/6)

UNIXの装置内で、複数プロセスからの同時アクセス
を排他する為にセマフォを使用するのですが、聞いた所
によると、セマフォを使用してロック中のプロセスが異
常終了した場合は、そのセマフォでロックした状態から
開放されないと聞きました。systmemVはロックしたまま
で、posixは色々制御出来るかも・・・。と聞きました。
ロックを解除する方法があるものでしょうか?。又、そ
のロックを解除する方法について、何らかの情報を教え
て頂けますでしょうか?。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全1件)

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

> セマフォを使用してロック中のプロセスが異常終了した場合は、そのセマフォで > ロックした状態から開放されないと聞きました この文面からすると、ロックした状態(というのは正確な表現ではありませんが)を 誰も解除できなくなってしまうんじゃないか、と思っているということですね。 そんなことはないですよ。 少なくとも、そのセマフォに対して書き込み権限があるプロセスからは自由に ...続きを読む
> セマフォを使用してロック中のプロセスが異常終了した場合は、そのセマフォで
> ロックした状態から開放されないと聞きました

この文面からすると、ロックした状態(というのは正確な表現ではありませんが)を
誰も解除できなくなってしまうんじゃないか、と思っているということですね。

そんなことはないですよ。

少なくとも、そのセマフォに対して書き込み権限があるプロセスからは自由に操作す
ることができます。そうじゃなくては、プロセス間通信の意味が無いですもんね。

どんな unix を使っているかにもよるとは思いますが、あるプロセスが行った
セマフォの操作を元に戻すやり方として、以下の三つを思い付きます。

・semop() するときに SEM_UNDO を指定する

このフラグを立ててセマフォを操作すると、そのプロセスが終了したときに、
セマフォの状態が元に戻ります。資源の排他なんかにセマフォを使うには、これで
十分だと思いますが、値を増やす操作と減らす操作を別プロセスにしたいような
場合には使えません。

・初期状態に戻すようなプログラムを作っておく

先程書いたように、そのセマフォへの書き込み権限があるプロセスからは操作が
可能なので、初期状態に戻すプログラムを作っておけば、セマフォのことを
あまり知らないユーザでも、異常な状態を戻すことができます。

・セマフォ自体を削除する

もし、セマフォ自体を削除してもいいのであれば、ipcrm というコマンドがある
はずなので、それを使ってセマフォ自体を削除してしまいましょう。何も用意しな
くても良いのが、このやり方のメリットですね。


> 何らかの情報を教えて頂けますでしょうか?

まずは、マニュアルを見ましょう。ある程度、unix やプログラムの知識が無いと
厳しいですが、man ページの semop、semget、semctl、ipcrm、ipcs といった
ところを読むと良いと思います。
お礼コメント
ssktoshi

お礼率 50% (3/6)

大変有難う御座います。すぐにsemop()関数を調べ
プロトで試してみます。
投稿日時 - 2001-07-19 15:04:03

このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ