c#同步锁的行为

本文关键字:同步 | 更新日期: 2023-09-27 18:15:56

我对c#中的线程有疑问。参见下面发布的代码。

 public class TestThreading
{
    private System.Object lockThis = new System.Object();
    public void Function1()
    {
        lock (lockThis)
        {
            // Access thread-sensitive resources.
        }
    }
    public void Function2(){
        lock (lockThis)
        {
            // Access thread-sensitive resources.
        }
    }
}

现在我的问题是如果一些线程进入Function1(内部锁块),同时另一个线程进入Function2会发生什么

  1. 线程将独立执行。
  2. 进入函数2的线程去等待,直到函数1线程释放锁。
  3. 进入函数2的线程抛出异常。

我是c#新手,所以问一些简单的基本问题。

c#同步锁的行为

进入函数2的线程去等待,直到函数1线程释放锁。

锁的目的是:提供一个"安全"的代码区域,一次只能被一个线程访问。另一个线程将被置于睡眠状态,并在第一个线程释放锁时恢复。

第二件事将会发生。第二个线程将在执行之前等待锁被释放。

第二个线程将等待第一个线程释放锁,然后它将获得锁并执行您的代码

我建议阅读以下描述多线程问题和库的文章

托管线程最佳实践

c#中的

线程约瑟夫Albahari