zoukankan      html  css  js  c++  java
  • 多线程信号源的理解

       1:  using System;
       2:  using System.Collections.Generic;
       3:  using System.Linq;
       4:  using System.Text;
       5:  using System.Threading;
       6:   
       7:  namespace CatVSMice
       8:  {
       9:      class Program
      10:      {
      11:          /// <summary>
      12:          /// 猫队的命令。
      13:          /// </summary>
      14:          static EventWaitHandle catCommand = new AutoResetEvent(false);
      15:   
      16:          static void Main(string[] args)
      17:          {            
      18:              new Thread(CatArmy).Start();//部队准备            
      19:              string str = "";
      20:              while (true)
      21:              {
      22:                  //等待猫军队集结完毕
      23:                  Thread.Sleep(1000);
      24:   
      25:                  Console.WriteLine("猫警长下达命令(ATTACK:攻击/NOATTACK:不攻击):");
      26:                  str = Console.ReadLine();
      27:                  if (str == "ATTACK")
      28:                  {
      29:                      catCommand.Set();//进攻命令
      30:                      break;
      31:                  }
      32:                  else
      33:                  {
      34:                      Console.WriteLine("猫队需要调整作战计划,部队暂按兵不动。");
      35:                  }
      36:                  Thread.Sleep(3000);
      37:              }
      38:   
      39:              Console.ReadLine();
      40:          }
      41:   
      42:          /// <summary>
      43:          /// 猫队部队移动
      44:          /// </summary>
      45:          static void CatArmy()
      46:          {
      47:              Console.WriteLine("猫队准备就绪,请队长下达命令!部队等待中。。。");
      48:              catCommand.WaitOne();//等待命令
      49:              Console.WriteLine("向老鼠发起进攻。。。");
      50:              Thread.Sleep(2000);
      51:              Console.WriteLine("猫队获得胜利!!!!!");
      52:              //Console.WriteLine("鼠军已被击败,是否全歼?!请下达命令:");
      53:   
      54:          }
      55:      }
      56:  }

    其实关于理解这块的东西用红绿灯的实例更能说明问题:
    static EventWaitHandle lightState = new AutoResetEvent(false);
    Main():
    如果是红灯:则Thread.Sleep(3000);
    lightState.Set();

    人过红绿灯的方法
    lightState.WaitOne();
    Console.WriteLine(“可以过马路了!”);
    空了我再写一个例子吧。

  • 相关阅读:
    网络协议(一)HTTP请求报文(请求行、请求头、请求体),响应报文
    Java集合(五) Set 添加元素
    Java 泛型面试题
    并发编程-线程池(二)线程池回收线程
    Java(二)equal 和 hashcode使用
    Java 泛型(一)作用和使用
    Java排序(一)实现类的排序
    Java排序(二)排序算法的稳定性
    SDL 程序编译错误-undefined reference to `SDL_GetError'
    SDL程序编译错误-error: conflicting types for ‘_XData32’
  • 原文地址:https://www.cnblogs.com/pnljs/p/3023837.html
Copyright © 2011-2022 走看看