C#中多线程信号控制ManualResetEvent和AutoResetEvent

      ManualResetEvent和AutoResetEvent 就像一个信号灯,可以利用它的信号,控制当前线程是挂起状态还是运行状态。
    采取bool值来呈现2个状态,终止状态和非终止状态。
    终止状态:bool值为true
                 此状态下WaitOne()方法不会挂起线程,也相对于有信号,线程可以执行了。
           Set()方法表示状态设为ture,让线程有信号执行下去。
    非终止状态:bool值为false
                此状态下WaitOne()方法会挂起线程,也相对无有信号,线程不能执行了。
           Reset()方法表示状态设为ture,让线程有信号执行下去。

    在初始化的时候可以设置这个状态。
           例如:ManualResetEvent(true)  表示初始化就是有信号的,WaitOne()方法不会被挂起;
                 ManualResetEvent(false) 表示初始化就是无信号的,WaitOne()将被挂起;
           AutoResetEvent 初始化定义和ManualResetEvent一样

ManualResetEvent和AutoResetEvent 的主要差别呢?
从字面来看,也可以看出一点端倪出来。AutoResetEvent 表示自动Reset,也就是当你调用Set的时候会立即自动调用Reset,也状态当被置成true(有信号)会立即在变成false(无信号)。这样好处在于控制单个线程还是方便的,但是对于多线程的话就麻烦了,如果多个线程中对同一个AutoResetEvent 实例的WaitOne方法将只有1个起作用。而ManualResetEvent不会主动Reset,因此此时WaitOne方法将都有效。所以绝大数情况下还是尽量使用ManualResetEvent。




评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭