相关疑难解决方法(0)

C#中的重入锁定

以下代码是否会在.NET上使用C#导致死锁?

 class MyClass
 {
    private object lockObj = new object();

    public void Foo()
    {
        lock(lockObj)
        { 
             Bar();
        }
    }

    public void Bar()
    {
        lock(lockObj)
        { 
          // Do something 
        }
    }       
 }
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading deadlock locking

116
推荐指数
4
解决办法
3万
查看次数

SyncRoot模式的用途是什么?

我正在阅读描述SyncRoot模式的ac#book.表明

void doThis()
{
    lock(this){ ... }
}

void doThat()
{
    lock(this){ ... }
}
Run Code Online (Sandbox Code Playgroud)

并与SyncRoot模式进行比较:

object syncRoot = new object();

void doThis()
{
    lock(syncRoot ){ ... }
}

void doThat()
{
    lock(syncRoot){ ... }
}
Run Code Online (Sandbox Code Playgroud)

但是,我真的不明白这里的区别; 似乎在这两种情况下,两种方法一次只能由一个线程访问.

本书描述了...因为实例的对象也可以用于从外部进行同步访问而你无法控制这个类本身的类型,你可以使用SyncRoot模式呃?"实例的对象"?

谁能告诉我上述两种方法之间的区别?

c# concurrency multithreading design-patterns

64
推荐指数
5
解决办法
3万
查看次数