シングルトーン オブジェクトへのアクセスを制限しようとしているので、一度に 1 つのスレッドだけがそれを使用します。さらに、同じスレッドが制限されたコードに 2 回アクセスするのを防ぎたいです。
Lock メソッドを試してみたところ、彼女をロックしたスレッドはロックされず、他のスレッドのみがロックされることがわかりました..
以下のように:
public sealed class Singleton
{
    private static readonly Singleton instance    = new Singleton();
    static Singleton()
    {
    }
    private Singleton()
    {
    }
    public static Singleton Instance
    { 
        get
        {
            return instance;
        }
    }
}
public class SomeWorker
{
    private readonly Timer _doWorkTimer = new Timer(20);
    public SomeWorker()
    {
        InitiateTimer();
    }
    private void InitiateTimer()
    { 
        _doWorkTimer .Elapsed += DoWorkElapse;
        _doWorkTimer .Enabled = true;
    }
    private void DoWorkElapse(object source, ElapsedEventArgs e)
    { 
        DoSomeWork();
    }
    private void DoSomeWork()
    {
        // I know that lock on string is wrong!
        // Its just for the example only I
        // Its just to make sure all the program is use the same lock..
        lock ("ConnectionLock")
        { 
             Console.WriteLine("Lock");
             var inst = Singletone.Instance;
             // Do Some Work on "inst" ...
             Console.WriteLine("Unlock");
        }
    }
}
たとえば、コンソールの結果は次のようになります。
. . .
ロック
ロック解除
ロック
ロック
ロック解除
. . .
ご覧のとおり、2 つの Lock コメントが次々と表示されます
つまり、「DoSomeWork()」がタイマー スレッドによって 2 回アクセスされることを意味します。
このロックを機能させる方法を知っている人はいますか?
他の同期方法はありますか?
ありがとう。