C#多线程通信

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks; namespace App.Test.Csharep.线程通信
{
public class MainThread
{
/// <summary>
/// 开始执行通知
/// </summary>
private EventWaitHandle dataChangeEvent = new AutoResetEvent(false); public int openDoorNum = ; /// <summary>
/// 测试流程: 完成10次开门后,每次开门完成都要完成进门操作,主线程完成开门,子线程完成进门
/// </summary>
public void Run()
{
var thread = new Thread(new ThreadStart(InputDoor));
thread.Name = "进门线程";
thread.IsBackground = true;
thread.Start(); Thread.Sleep(); for (int i = ; i < ; i++)
{
openDoorNum++;
Console.WriteLine("AA完成开门第" + openDoorNum + "次开门"); /// 通知已经完成开门操作
dataChangeEvent.Set(); /// 在执行dataChangeEvent.Set()后,dataChangeEvent.WaitOne()开始获取信号,为防止没有获取到信号时
/// 又执行dataChangeEvent.Set()方法,则上次的dataChangeEvent.WaitOne()需要执行的代码不会被执行,
/// 所以暂时休眠,否则进门可能次数不够
Thread.Sleep();
} Console.Read();
} /// <summary>
/// 完成进门操作
/// </summary>
private void InputDoor()
{
///收到开门的线程通知,WaitOne方法如果在通知线程set()前如果能及时收到信号,则一直会处于阻塞代码
/// 如果在dataChangeEvent.WaitOne()过程中获取信号同时,被调用线程给set()了,则dataChangeEvent.WaitOne()
/// 应该是收不到信号的,所以要在调用线程中执行完dataChangeEvent.set()后应该休眠一会,在调用dataChangeEvent.set() /// 保证子线程一直在处于运行状态
while (true)
{
//if (dataChangeEvent.WaitOne())
//{
// Console.WriteLine("\tA第" + openDoorNum + "次进门");
//} /// 等待100毫秒,没有收到信号则释放,继续往下面执行,date会被赋值
if (dataChangeEvent.WaitOne(, false))
{
Console.WriteLine("\t 【" + Thread.CurrentThread.Name + "】A第" + openDoorNum + "次进门");
}
}
}
}
}

C# 线程通信 一的更多相关文章

  1. 第23章 java线程通信——生产者/消费者模型案例

    第23章 java线程通信--生产者/消费者模型案例 1.案例: package com.rocco; /** * 生产者消费者问题,涉及到几个类 * 第一,这个问题本身就是一个类,即主类 * 第二, ...

  2. Linux下c开发 之 线程通信(转)

    Linux下c开发 之 线程通信(转) 1.Linux“线程” 进程与线程之间是有区别的,不过Linux内核只提供了轻量进程的支持,未实现线程模型.Linux是一种“多进程单线程”的操作系统.Linu ...

  3. java多线程-线程通信

    线程通信的目标是使线程间能够互相发送信号.另一方面,线程通信使线程能够等待其他线程的信号. 通过共享对象通信 忙等待 wait(),notify()和 notifyAll() 丢失的信号 假唤醒 多线 ...

  4. Java---Condition控制线程通信

    java中控制线程通信的方法有:1.传统的方式:利用synchronized关键字来保证同步,结合wait(),notify(),notifyAll()控制线程通信.不灵活. 2.利用Conditio ...

  5. Java 线程通信

    线程通信用来保证线程协调运行,一般在做线程同步的时候才需要考虑线程通信的问题. 1.传统的线程通信 通常利用Objeclt类提供的三个方法: wait() 导致当前线程等待,并释放该同步监视器的锁定, ...

  6. Java核心知识点学习----使用Condition控制线程通信

    一.需求 实现线程间的通信,主线程循环3次后,子线程2循环2次,子线程3循环3次,然后主线程接着循环3次,如此循环3次. 即:A->B->C---A->B->C---A-> ...

  7. java笔记--关于线程通信

    关于线程通信 使用多线程编程的一个重要原因就是线程间通信的代价比较小 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3897773.h ...

  8. .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法

    1.多线程简单使用(1)进程是不执行代码的,执行代码的是线程,一个进程默认有一个线程(2)线程默认情况下都是前台线程,要所有的前台线程退出以后程序才会退出,进程里默认的线程我们叫做主线程或者叫做UI线 ...

  9. Java线程同步和线程通信

    一.线程同步 当多个线程访问同一个数据时,非常容易出现线程安全问题.这时候就需要用线程同步. 不可变类总是线程安全的,因为它的对象状态是不可改变的,但可变类对象需要额外的方法来保证线程安全. 1.同步 ...

随机推荐

  1. 一个快速double转int的方法(利用magic number)

    代码: int i = *reinterpret_cast<int*>(&(d += 6755399441055744.0)); 知识点: 1.reinterpret_cast&l ...

  2. DataTable/集合 转 Json

    前端用的jqueryUI框架获取json格式数据绑定显示表格. 后端通过WebService获取的数据是DataTable. 现将获取DataTable转Json,也支持将数据集合转Json. 一.项 ...

  3. JavaScript作用域和闭包

    在JavaScript中,作用域是执行代码的上下文.作用域有3种类型: 1.全局作用域 2.局部作用域---(又叫函数作用域) 3.eval作用域 var foo =0;//全局作用域console. ...

  4. C#程序以管理员权限运行

    原文:C#程序以管理员权限运行 C#程序以管理员权限运行 在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员 ...

  5. C# LINQ

    Sorting: OrderBy ThenBy OrderByDescending ThenByDescending Reverse public IEnumerable<Customer> ...

  6. php类和对象

    <?php 1. 类的简单格式: [修饰符] class 类名{ [成员属性] //成员属性,也叫成员变量 [成员方法] //成员方法:也叫成员函数 } 类的完整格式: [修饰符] class ...

  7. AppScan漏洞“已解密的登陆请求”修复解决方案

    最近在修复系统漏洞时,使用新版AppScan扫描IIS站点(WebForm)出现一个严重漏洞“已解密的登陆请求”. 扫描工具修复的建议为在登陆界面不使用含“password”类型的控件或加密录入参数. ...

  8. 003:Posix IPC的消息队列

    1:与FIFO相比,FIFO要求对一个管道写入之前,必须有进程进行读打开.消息队列则不需要有进行在队列上等待消息的到达. 2:POSIX每次读取总是返回优先级最高的,system V则可以返回任意优先 ...

  9. 同步github上fork出来的分支

    1,clone自己的账号里fork库的分支到本地 git clone 地址_branch 2,增加远程原始分支 git remote add upstream 地址_master 3,fetch原始源 ...

  10. MWeb 1.4 新功能介绍二:静态博客功能增强

    MWeb 比较有特色的是一键生成静态博客功能,然后从 MWeb 最开始规划要做静态博客生成功能时,我就希望 MWeb 的静态博客生成功能在易用的同时,还要有很强大的扩展性. 比如说能自己增加网站公告, ...