2009-06-16 5 views
5

私のコードにはロックがあります。
私は同時に2つのスレッドを実行しています。 スレッドがそのオブジェクトをロックしているかどうかを確認するにはどうすればよいですか?オブジェクトがロックされているかどうか調べるには? c#

private readonly object _lockObject = new Object(); 

// Both methods running 
public void Method1() 
{ 
    if(certainCriteria) 
    { 
     lock(_lockObject) 
     { 
     //doWork; 
     } 
    } 
} 

// Both methods running 
public void Method2() 
{ 
    if(isLocked?(_lockObject)) 
    { 
     //doWork; 
    } 
} 

誰でもisLockedを取得していますか?方法?

ありがとうございます!

答えて

8

あなたMonitor.TryEnterを使用します(どちらか0のタイムアウト、またはすべてでタイムアウトを取ることはありませんオーバーロードで)、その後すぐにそれが成功した場合Monitor.Exitを呼び出すことができます - しかし、私は、これは一般的に悪いと言うだろうデザインの匂い。特に、データはすぐに返されます。

達成しようとしていることは何ですか?

+0

@Jon:Yaowは速すぎます。yaawは(ブラックカントリーのアクセントを管理することができればもっと読みやすくなります)。それは私が "ロックの仕組み"を知っている根拠に基づいて動作するという巨大な警告で提案しようとしていたものでした。 – AnthonyWJones

+0

私は、ロックの仕組みを知っていることに依存しているという事実に特に悩まされているわけではありません。それは間違っていると感じるだけです。私はあえてそれが役に立ついくつかの状況があると言っていますが、おそらく実際に使用されている場所よりも少ないでしょう! –

+0

こんにちはJon!私はBufferManagerを実装しています。基本的にはStack of Buffersを持っています。スレッドpop()がスタックで空です。スレッドがスタックをいっぱいにしている間、すべてのスレッドが次のpop()で待機するようにします。一度塗りつぶされると、他のすべてのスレッドがポップする。私はC#のロック機構について確信しています! – divinci

関連する問題