SynchronizationAttribute和reentry

时间:2017-11-28 12:55:16

标签: c# multithreading synchronization

尝试理解[SynchronizationAttribute][1] reentry是必需的标志。

根据albahari

  

如果同步属性应用了可重入   参数为真:

     

[Synchronization(true)]然后同步上下文的锁定   当执行离开上下文时暂时释放。

根据我的理解,当程序离开具有上下文代码的对象所拥有的函数时,同步上下文总是被释放。

下面的示例在[Synchronization(true)]情况下运行,例如根本没有同步内容,而[Synchronization(false)]个案块会按预期阻止,并且通过感受同步上下文让我感到高兴。

[Synchronization(true)]
public class DeadLock: ContextBoundObject
{
    public  DeadLock Other;
    public void Demo()  { Thread.Sleep(1000); Console.WriteLine("demo "+ Thread.CurrentThread.ManagedThreadId); ; Other.Demo(); }
    public static void Hello() { Console.WriteLine("hello"); }


}

class Program
{
    static void Main(string[] args)
    {
        DeadLock d1 = new DeadLock();
        DeadLock d2 = new DeadLock();
        d1.Other = d2;
        d2.Other = d1;
        new Thread(d1.Demo).Start();
        Console.WriteLine("startng d2.Demo");
        d2.Demo();


    }
}

Synchronization(true)和完全没有同步上下文的类之间有什么区别?

0 个答案:

没有答案