- PR -

asp.net(VB)  エラー:ミューテックスの解放について

投稿者投稿内容
あかり
常連さん
会議室デビュー日: 2009/02/18
投稿数: 38
投稿日時: 2009-03-05 08:29
msuk様お疲れ様です。

私がエラーを出したケースは、
本来例1のようにあるべきでした。

例1
AがMutex("NAME")を作成(所有権)
BがMutex("NAME")を作成する
BがWaitOneで所有権を取得待ち
AがRelaceMutexを行い所有権を開放
Bが所有権を獲得
BがRelaceMutexを行い所有権を開放

それをAが処理を行っていた場合Bは今回の処理を見送るという変更を加えました。
例2
AがMutex("NAME")を作成(所有権)
BがMutex("NAME")を作成する
Bが作成したMutexには所有権がないためRelaceMutexを行いBを破棄
AがRelaceMutexを行い所有権を開放

例2の変更をした時点で、前回報告させていただいたエラーが発生しました。
イメージとしてはAが持っている所有権をBが開放しようとして発生していると考え例3のようにしました。
例3
AがMutex("NAME")を作成(所有権)
BがMutex("NAME")を作成する
Bが作成したMutexには所有権がないためRelaceMutexを行わない
AがRelaceMutexを行い所有権を開放

私の場合は上記のような例でした、参考になれば幸いです。
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-03-05 10:23
開発環境を削除しても、新規Webサイト(別のソリューションですよね?)でも
Mutexの問題が継続して発生するというのは不思議な感じですね。


最初の投稿の書きぶりから、開発中のプロジェクトでMutexを使っているわけではないと解釈しているんですが、その認識はあってますでしょうか?
あかり
常連さん
会議室デビュー日: 2009/02/18
投稿数: 38
投稿日時: 2009-03-05 13:32
>開発環境を削除しても、新規Webサイト(別のソリューションですよね?)でも
Mutexの問題が継続して発生するというのは不思議な感じですね。


最初の投稿の書きぶりから、開発中のプロジェクトでMutexを使っているわけではないと解釈しているんですが、その認識はあってますでしょうか?

私も同感です。
ただ、Mutex名称はコンピュータないでユニークが保障されていないことが原因なのではないでしょうか?
msuk様のコンピュータ内で同じMutex名が使用されている場合は発生することがあるかもしれません。
msuk
会議室デビュー日: 2009/03/03
投稿数: 5
投稿日時: 2009-03-05 13:54
開発中プロジェクトでmutexを使用していないと思い込んでいましたが、検索してみたら
使っていました!(途中まで違う方が開発されていましたので気づきませんでした)

すみませんでした。エラーが出た時点で確認するべきでした。。
惑わせてしまった方々、申し訳ございませんでした。


Protected Shared Sub Main()
Dim hMutex As New System.Threading.Mutex(False, Application.ProductName)
If hMutex.WaitOne(0, False) = True Then
GC.KeepAlive(hMutex)
Application.Run(New Form)
Else
Application.Exit()
End If
hMutex.Close()
End Sub

というソースがありました。

ちなみに落としてきたプロジェクトでは使用していないようです。

スキルアップ/キャリアアップ(JOB@IT)