代码之家  ›  专栏  ›  技术社区  ›  RCIX

为什么对单独的对象执行锁定[[副本]

  •  17
  • RCIX  · 技术社区  · 15 年前

    可能重复:
    Difference between lock(locker) and lock(variable_which_I_am_using)

    3 回复  |  直到 7 年前
        1
  •  19
  •   João Angelo    15 年前

    锁定在一个单独的 private dummy对象保证没有其他人锁定该对象。

    public class MyObject
    {
        public void SharedMethod()
        {
            lock (this)
            {
                // Do stuff
            }
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            MyObject o = new MyObject();
    
            lock (o)
            {
                new Thread(() =>
                {
                    // Gets blocked 2s because of external lock
                    o.SharedMethod();
                }).Start();
    
                Thread.Sleep(2000);
            }
        }
    }
    
        2
  •  9
  •   Daniel    7 年前

    Jeff Richter(CLR Via C#的作者)在这篇关于 Safe Thread Synchronization .

    这实际上是书中的一章 CLR Via C# .

    总之,将私有对象作为“synclock”对象允许类封装和控制类所需的任何锁定。因此,无论有多少客户端使用您的类,锁定都是一致且正确地执行的。

        3
  •  2
  •   RichardOD    15 年前

    Eric Gunnerson的博客上有一些很棒的东西。看见 here here