私は以下のような状況があります。オブジェクトへのアクセスを相互に排除したい。ロックとモニタを同じオブジェクトで安全に使用できますか?
これまでのところ私はnormaly今、私はまた、別のスレッドから呼び出すことができるメソッドを持って
object lockObject = new object();
...
method1: lock(lockObject) { CODE1 }
ロックオブジェクトを使用します。未知の時間のためにブロックされるべきではなく、定義された時間内に答えが得られるはずです。私は、モニターを使用します。この場合、
、今method2:
try{
Monitor.TryEnter(lockObject , 20000, ref lockTaken);
if (lockTaken) {CODE2}
}
catch(...){...}
finally
{
if (lockTaken) Monitor.Exit(timerLock);
}
のように私の質問です:ロックすることができ、モニターはlockobjectが同じであれば、このような方法で混合し、相互に排除し、または希望しますすべてのロックをモニターに変更する必要があります。
したがって、同じトークンが両方とも「ロック」されているか、モニターがオブジェクトのロックとロックの別のトークンを作成しますか?
私は、アプリケーションが両方のコードで同時に実行されているのを見ることはできません。しかし、CODE1とCODE2が並行して実行されるタイミングの問題が存在するかどうかはわかりません。
私はあなたの痛みを感じます。私はしばしば 'lock'キーワードが何とかタイムアウトになることを願っています –