C# の lock ステートメントはクリティカルセクションです。
たぶん、
lock(g)
とやったときに、g 自身がロックされると勘違いされているのではないでしょうか?
class Clazz{
private static object syncobj = new object();
public void Func1(){
lock(syncobj){
// コード1
}
}
public void Func2(){
lock(syncobj){
// コード2
}
}
}
lock は上記のようにやれば、「コード1」を実行中に「コード2」が実行される事はありません、という使い方です。
当然ですけど、まったく同じオブジェクトをロックしなければなりませんよ。
|