首页主机资讯c# wait 能否与 lock 一起用

c# wait 能否与 lock 一起用

时间2025-09-27 03:16:04发布访客分类主机资讯浏览1044
导读:在C#中,Wait和Lock可以一起使用,但它们分别属于不同的类:Wait属于System.Threading.Monitor类,而Lock属于System.Threading.Monitor类的一个静态属性。 Monitor.Wait方法...

在C#中,WaitLock可以一起使用,但它们分别属于不同的类:Wait属于System.Threading.Monitor类,而Lock属于System.Threading.Monitor类的一个静态属性。

Monitor.Wait方法用于等待一个对象监视器上的锁被释放。当调用Monitor.Wait方法时,当前线程会释放对象的锁并进入等待状态。当其他线程调用Monitor.PulseMonitor.PulseAll方法时,等待的线程将被唤醒并重新尝试获取对象的锁。

Monitor.Lock是一个静态属性,用于获取一个对象的监视器上的锁。当调用Monitor.Lock方法时,当前线程会获取对象的锁并继续执行。如果锁已被其他线程持有,则当前线程将阻塞,直到锁被释放。

以下是一个使用Monitor.WaitMonitor.Lock的示例:

using System;
    
using System.Threading;


class Program
{
    
    private static readonly object _lockObject = new object();


    static void Main()
    {
    
        Thread thread1 = new Thread(Thread1);
    
        Thread thread2 = new Thread(Thread2);
    

        thread1.Start();
    
        thread2.Start();

    }


    static void Thread1()
    {
    
        Monitor.Lock(_lockObject);
    
        Console.WriteLine("Thread1 acquired the lock.");
    

        // Simulate some work
        Thread.Sleep(1000);
    

        Monitor.Wait(_lockObject);
    
        Console.WriteLine("Thread1 released the lock and is waiting.");
    

        // Simulate some more work
        Thread.Sleep(1000);
    

        Monitor.Exit(_lockObject);
    
        Console.WriteLine("Thread1 exited.");

    }


    static void Thread2()
    {
    
        Monitor.Lock(_lockObject);
    
        Console.WriteLine("Thread2 acquired the lock.");
    

        // Simulate some work
        Thread.Sleep(1000);
    

        Monitor.Pulse(_lockObject);
    
        Console.WriteLine("Thread2 pulsed the lock.");
    

        Monitor.Exit(_lockObject);
    
        Console.WriteLine("Thread2 exited.");

    }

}
    

在这个示例中,Thread1Thread2都尝试获取同一个对象的锁。Thread1首先获取锁并执行一些工作,然后释放锁并等待。Thread2Thread1释放锁后获取锁并执行一些工作,然后通过Monitor.Pulse唤醒Thread1。最后,两个线程都释放锁并退出。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: c# wait 能否与 lock 一起用
本文地址: https://pptw.com/jishu/709402.html
c# wait 对线程有何影响 c# wait 能否指定等待时间

游客 回复需填写必要信息