zoukankan      html  css  js  c++  java
  • 条件变量模式-让线程根据条件执行

     1     /// <summary>
     2     /// 条件变量模式
     3     /// 让线程根据条件执行
     4     /// </summary>
     5     public sealed class ConditionVariablePattern
     6     {
     7         //两个线程使用同一个锁
     8         private readonly object m_lock = new object();
     9 
    10         //复合条件(此处只是简单的Boolean类型)
    11         private bool m_condition = false;
    12 
    13         public void Thread1()
    14         {
    15             //在指定对象上获取排他锁
    16             Monitor.Enter(m_lock);
    17 
    18             //在锁中原子性的测试复合条件
    19             //条件不满足时
    20             while (!m_condition)
    21             {
    22                 //临时释放锁,使其它线程能够获取它
    23                 //等待另一个线程更改条件
    24                 //释放对象上的锁并阻止当前线程,直到它重新获取该锁
    25                 Monitor.Wait(m_lock);
    26             }
    27 
    28             //走到这里表示条件满足,可以处理自己的业务
    29 
    30             //永久释放锁
    31             Monitor.Exit(m_lock);
    32         }
    33 
    34         public void Thread2()
    35         {
    36             //获取一个互斥锁
    37             Monitor.Enter(m_lock);
    38 
    39             //处理业务数据,修改条件
    40             m_condition = true;
    41 
    42             //解除线程阻塞可能会浪费一些CPU时间
    43             //通知等待队列中的线程锁定对象状态的更改
    44             //即释放锁之后唤醒一个正在等待的线程
    45             //Monitor.Pulse(m_lock);
    46 
    47             //解除线程阻塞可能会浪费一些CPU时间
    48             //通知所有的等待线程对象状态的更改
    49             //即释放锁之后唤醒所有正在等待的线程
    50             Monitor.PulseAll(m_lock);
    51 
    52             //释放锁
    53             Monitor.Exit(m_lock);
    54         }
    55     }
  • 相关阅读:
    Nebula通关指南
    hackersonlineclub.com
    PHP设计的超强大的文件上传类(单文件上传)
    PHP面向对象实例(图形计算器)
    DIV+CSS布局网站基本框架
    python的threading模块
    Python 命令行参数和getopt模块详解
    python optparse模块
    python的sys模块
    python实现简单的netcat
  • 原文地址:https://www.cnblogs.com/xuejietong/p/9021974.html
Copyright © 2011-2022 走看看