c# synchronization 锁的行为方式

标签 c# multithreading

我对 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(在锁 block 内)并且同时另一个线程进入 Function2 会发生什么

  1. 线程将独立执行。
  2. 进入 Function 2 的线程 Goes to wait until lock is release by Funtion1 thread.
  3. 进入函数2的线程抛出异常。

我是 c# 的新手,因此问了一些简单的基本问题。 提前致谢。

最佳答案

进入Function 2的线程Goes等待,直到Funtion1线程释放锁。

锁的目的只是:提供一个“安全”的代码区域,一次只能由一个线程访问。另一个线程将进入休眠状态,并在第一个线程释放锁时恢复。

关于c# synchronization 锁的行为方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16811191/

相关文章:

c# - 如何制作真正透明的控件?

c# - Entity Framework 4.0 和自引用表; .SaveChanges() 在 .AddObject() 上失败

c# - 如何阻止我的 <httpErrors> 404 "ExecuteURL"映射破坏我的表单?

c++ - 这段代码线程安全吗?如果不是什么时候以及怎么会出错?

ios - UICollectionView reloadData 索引超出范围

c# - 如何在 Picturebox C# 中添加标签透明度?

c# - 为什么我们使用接口(interface)作为抽象类也这样做?

c - 不使用pthread_detach或pthread_join,不会为其他新创建的线程清理资源吗?

java - RxJava : How to get all results AND errors from an Observable

c++ - 为什么条件变量需要锁(因此也需要互斥锁)