c# - 多个代码块被同一个对象锁定

标签 c# .net multithreading c#-4.0

如果我有这样的东西:

private readonly object objectLock = new object();

public void MethodA()
{
    lock(objectLock)
    {
      //do something
    }
}

public void MethodB()
{
    lock(objectLock)
    {
      //do something
    }
}

如果我有 2 个线程并且同时进入,第一个线程调用 MethodA 和第二个方法 B。先到达那里并锁定 objectLock,我假设另一个线程坐在那里等待 objectLock 不再被锁定。

最佳答案

是的,你的解释是正确的——除非锁已经被占用(在这种情况下,两个线程都在等待,并且任意一个线程在解锁后立即获得锁)。

(稍微偏离主题)如果它们正在做一些重要的事情,我建议不要锁定整个方法。尽量使代码的“锁定”部分尽可能小和快。

关于c# - 多个代码块被同一个对象锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7834551/

相关文章:

c# - 如何在 gridview 中动态添加页脚行。带文本框

c# - 什么时候应该使用 Environment.Exit 来终止控制台应用程序?

c# - 如何按指定数量增加 IP 地址?

c# - WCF 服务超时,然后执行操作?

c# - 我们如何将 SOAP 网络服务的返回类型指定为 JSON 格式?

c# - 如何将 html 友好的 ascii 代码转换为 c# 中的字符串?

java - "synchronization actions are totally ordered"是什么意思?

c# - 在 C# 中实现自己的线程

c++ - 哪个先执行,RAII还是函数返回值

c# - 我如何知道哪个参数导致 OracleCommand Insert 出现 FormatException ("Input string was not in a correct format")?