セマフォの質問です(Windows、C++)


<前提条件>
複数のプロセスで1つのファイルに書込を行う為にセマフォを使用して
使用権限を制限しています。

ここで1つのプロセスが、HungUPしたとします。

この場合、この状態を検知した監視プロセスは動作を復帰させる為に
このプロセスを一度殺して再立ち上げを行う動作を行うとします。

<質問>
単純に殺すと、プロセスがセマフォを握ったままの可能性が、有ります
これを回避する為、殺す前にそのプロセスが握っているセマフォを全て
解放する必要が有ると思われるのですが、これは可能でしょうか?
可能な場合は、その手法を教えて下さい

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/05/07 15:24:43
  • 終了:2010/05/11 14:21:09

ベストアンサー

id:lizy No.2

lizy回答回数45ベストアンサー獲得回数142010/05/08 01:11:02

ポイント35pt

Semaphoreを使用する限り、難しいというか不可能ではないかと思われます。

Incrementing Semaphores on process termination

プログラムの構造上、単一のプロセスからのみのアクセスでよいのであれば、Semaphoreの代わりにMutexを使ってみてはどうでしょうか。Mutexであれば、ロックを保持したスレッドが終了してしまった場合でもロックが自動的に解放されます(WaitForSingleObjectでロック待ちをしている側にはWAIT_ABANDONEDで通知される)


If a thread terminates without releasing its ownership of a mutex object, the mutex object is considered to be abandoned. A waiting thread can acquire ownership of an abandoned mutex object, but the wait function will return WAIT_ABANDONED to indicate that the mutex object is abandoned.

Mutex Objects (Windows)

id:gin106

・・・・

2010/05/11 14:20:10

その他の回答(1件)

id:pyopyopyo No.1

pyopyopyo回答回数348ベストアンサー獲得回数862010/05/08 00:40:27

ポイント35pt

エラー処理のような細かい制御は、Mutexを使った方が良いかも知れません。

サンプルコードがあります

http://nienie.com/~masapico/api_CreateMutex.html

id:gin106

・・・・・

2010/05/11 14:19:54
id:lizy No.2

lizy回答回数45ベストアンサー獲得回数142010/05/08 01:11:02ここでベストアンサー

ポイント35pt

Semaphoreを使用する限り、難しいというか不可能ではないかと思われます。

Incrementing Semaphores on process termination

プログラムの構造上、単一のプロセスからのみのアクセスでよいのであれば、Semaphoreの代わりにMutexを使ってみてはどうでしょうか。Mutexであれば、ロックを保持したスレッドが終了してしまった場合でもロックが自動的に解放されます(WaitForSingleObjectでロック待ちをしている側にはWAIT_ABANDONEDで通知される)


If a thread terminates without releasing its ownership of a mutex object, the mutex object is considered to be abandoned. A waiting thread can acquire ownership of an abandoned mutex object, but the wait function will return WAIT_ABANDONED to indicate that the mutex object is abandoned.

Mutex Objects (Windows)

id:gin106

・・・・

2010/05/11 14:20:10
  • id:ohmix1
    プロセスが死んだとき、セマフォはどうなるか?という質問でしょうか?
    http://msdn.microsoft.com/ja-jp/library/cc429076.aspx
    >セマフォのハンドルを閉じるには、CloseHandle 関数を使います。
    >プロセスが終了する際に、システムはそのプロセスが所有していたハンドルを自動的に閉じます。

    それとも、セマフォのカウンタを+1する方法は?という質問でしょうか?
    http://msdn.microsoft.com/ja-jp/library/cc429316.aspx

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません