zoukankan      html  css  js  c++  java
  • AutoResetEvent 与 ManualResetEvent区别

    在C#多线程编程中,这两个类几乎是不可或缺的,他们的用法\声明都很类似,那么区别在哪里了?

    Set方法将信号置为发送状态 Reset方法将信号置为不发送状态 WaitOne等待信号的发送

    其实,从名字就可以看出一点端倪  ,一个手动,一个自动,这个手动和自动实际指的是在Reset方法的处理上,如下面例子

    public AutoResetEvent autoevent=new AutoResetEvent(true);

    public ManualResetEvent manualevent=new ManualResetEvent(true);

    默认信号都处于发送状态,

    autoevent.WaitOne();

    manualevent.WaitOne();

    如果 某个线程调用上面该方法,则当信号处于发送状态时,该线程会得到信号,得以继续执行

    差别就在调用后,autoevent.WaitOne()每次只允许一个线程进入,当某个线程得到信号(也就是有其他线程调用

    了autoevent.Set()方法后)后,autoevent会自动又将信号置为不发送状态,则其他调用WaitOne的线程只有继续等待.也就是说,autoevent一次只唤醒一个线程

    而manualevent则可以唤醒多个线程,因为当某个线程调用了set方法后,其他调用waitone的线程获得信号得以继续执行,而manualevent不会自动将信号置为不发送.也就是说,除非手工调用了manualevent.Reset().方法,则

    manualevent将一直保持有信号状态,manualevent也就可以同时唤醒多个线程继续执行

  • 相关阅读:
    Kafka Shell基本命令(包括topic的增删改查)
    thefuck的安装和使用
    Linux运维利器之ClusterShell
    MySQL数据库的10大经典错误案例
    Mysql 常用操作
    Git 忽略特定文件或文件夹
    为什么需要拷贝构造函数
    C语言编译过程
    设计模式之建造者模式
    设计模式之工厂/抽象工厂模式
  • 原文地址:https://www.cnblogs.com/onefly17/p/2048608.html
Copyright © 2011-2022 走看看