可以将线程安全对象定义为Readonly变量吗?

时间:2016-03-25 13:04:18

标签: c# multithreading thread-safety

我可以像下面这样定义lockObject:

private readonly object lockObject;

或者应该像这样玷污:

private object lockObject;

1 个答案:

答案 0 :(得分:4)

99.99%的时间使用只读

传统上你会想要一个只读对象作为你的锁,原因是如果你没有使它成为只读的变量lockObject上的对象正在进行锁定而且它会在那里发生变化是将锁定放在多个线程的不同对象上的情况。

这是一个很好的列表解释,可能会导致问题而不使用只读锁定

  1. 主题A在lockObject
  2. 抓取锁定
  3. 主题B在lockObject
  4. 更改变量
  5. 线程C在lockObject处抓取锁定,这与第1步中的锁定不同
  6. 0.01%的时间

    这是因为您想要因某种原因更改锁定,即您控制访问权限的资源已更改,但可能仍有线程在上一个资源上运行,并且您认为它们当前的操作对您的程序仍然有效,而且你不想等他们改变锁定。 再次出现警告,您可能不应该这样做