c# - 何时使用锁定的指南

标签 c# multithreading locking

我想知道是否有开发人员应遵循的关于何时(和何处)放置锁的指南。

例如:我理解像这样的代码应该被锁定,以避免另一个线程意外更改 SomeHeapValue 的值的可能性。

class Foo
{
  public SomeHeapObject myObject;
  public void DoSummat(object inputValue_)
  {
    myObject.SomeHeapValue = inputValue_;
  }

}

但是,我的问题是,锁定有多深?例如,如果我们有这样的代码:

class Foo
{
  public SomeHeapObject myObject;
  public void DoSummat(object inputValue_)
  {
    myObject.SomeHeapValue = GetSomeHeapValue();
  }

}

我们应该锁定在 DoSummat(...) 方法中,还是应该锁定在 GetSomeHeapValue() 方法中?

在构建多线程代码时,你们是否都牢记任何准则?

最佳答案

我找到的关于锁定和线程的最佳指南是这个页面(这是我在使用锁定和线程时引用的文本):

http://www.albahari.com/threading/

你想要“锁定和线程安全”这一段,但也请阅读其余部分,它写得非常好。

关于c# - 何时使用锁定的指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2779703/

相关文章:

python - 为什么这个多线程 python 程序可以正确打印 0 到 99?

Java-允许一个线程更新值,其他线程等待并跳过关键部分

mysql - 如何锁定 MySQL 中的一行?

c# - 下拉枚举

c# - 使用字符串操作和正则表达式的 LINQ 查询结果

c# - WPF 自定义控件/控件模板

java - 安全地关闭从不同线程读取套接字输入流的线程

multithreading - Thread.Finish Thread Execution 的目的是什么?它何时被调用?

C# :Cyclomatic Complexity of a method with FxCop sdk

hibernate - Grails:乐观锁定,StaleObjectStateException与Spring Security session 中的域,更新计数器