相关疑难解决方法(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万
查看次数

锁定传递对象会发生什么?

在一个项目我正在玩线程.我试图建立一个不会"破坏"数据的安全线程.我的线程在后台运行,并在另一个类上调用函数,我可以调用Go和Go2,一个函数添加,一个从列表中删除.我不希望它们同时运行,以下情况有什么区别:

static readonly object _locker1 = new object();
static readonly object _locker2 = new object();


public void Go(Object something)
{
  lock (_locker1)
  {
    myList.add(something);
  }
}

public void Go2(Object something)
{
  lock (_locker2)
  {
    myList.Remove(something);
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我用以下代替Go2:

public void Go2(Object something)
{
  lock (_locker1)
  {
    myList.Remove(something);
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意锁定参数.

第三种情况可以帮助我理解,假设我从一个不同的线程(thread2)调用Go,它是否可以运行,因为_locker1被thread2锁定而Go2(它具有被thread2锁定的_locker 1)是从thread1调用的?

static readonly object _locker1 = new object();
static readonly object _locker2 = new object();


public void Go(Object something)
{
  lock (_locker1)
  {
    //Can I call Go2 which is …
Run Code Online (Sandbox Code Playgroud)

c# multithreading locking

1
推荐指数
1
解决办法
108
查看次数

标签 统计

c# ×2

locking ×2

multithreading ×2

.net ×1

deadlock ×1