2011-07-04 6 views

答えて

2

インスタンスメンバーを静的にロックしてロックする場合と、インスタンスメンバーをロックする場合とで実行時に違いはありません。ただし、インスタンスロックを使用し、静的なものを更新する場合は、コードが破損する可能性があります。

class Broken { 
    static int myCounter; 
    object synch = new object(); 

    void SomeMethod() 
    { 
     lock (synch) { // BAD 
     ++myCounter; 
     } 
    } 
} 
+0

あなたは、クラス内で静的オブジェクトをロックするのがベストプラクティスだと言っていますか? – Eyal

+0

私は常にロック目的のために静的を使用してきました。 –

+0

okありがとうございます - これは私がやることです! – Eyal

0

Huh?私はあなたがロックしているものに依存すべきだと思った。非静的オブジェクトをロックしようとすると、非静的オブジェクトをロックする必要があります。ところで、あなたは何をしようとしているのか調査したいと思うかもしれませんが、たいていの場合、既にスレッドセーフなオブジェクトの組み込み言語があります。

0

なぜ非静的メソッドをロックしていますか?通常は、共有リソース、つまりすべてのスレッド間で共有される共有リソースへのアクセスを中心とした同期が必要です。あなたはインスタンスメソッドでこれをしません。シングルトンを望みます。