当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《锁定传递对象会发生什么?》经验,为你挑选了1个好方法。

在一个项目我正在玩线程.我试图建立一个不会"破坏"数据的安全线程.我的线程在后台运行,并在另一个类上调用函数,我可以调用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);
  }
}

如果我用以下代替Go2:

public void Go2(Object something)
{
  lock (_locker1)
  {
    myList.Remove(something);
  }
}

请注意锁定参数.

第三种情况可以帮助我理解,假设我从一个不同的线程(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 locked by the same object?
    Go2(something);
  }
}

public void Go2(Object something)
{
  lock (_locker1)
  {
    myList.Remove(something);
  }
}

有人可以解释传递给锁的值是什么吗?



1> Cecilio Pard..:

这很简单:如果两个锁使用相同的对象,它们将不会同时运行.在你的第一个片段中,当Go和Go2锁定在不同的对象上时,它们可以同时运行并做坏事.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有