基元线程同步构造之waithandle中 waitone使用
在使用基元线程同步构造中waithandle中waitone方法的讲解:
调用waithandle的waitone方法阻止当前线程(提前是其状态为Nonsignaled,即红灯),直到当前的 WaitHandle 收到绿灯信号。
WaitHandle有两个状态"Signaled" and "Nonsignaled",前者可以理解为绿灯,绿灯状态时WaitOne方法无效,当前线程不会被阻止,后者可以理解为红灯,WaitOne()方法会阻止当前线程。
(1):一般来说,初始状态都是"Nonsignaled",即红灯,这样当调用WaitOne时,线程会暂停掉,这正是通常情况下我们调用WaitOne时想要的效果。这也正是Reset(字面义“重置”)被定义为设成红灯的原因。所以初始化时参数用false,代表初始状态为红灯。
using System;
using System.Threading;
class WaitOne
{
//初始化为 false,即Nonsignaled,必须调用set后才能变成Signaled,
//autoEvent.WaitOne();之后的代码才会运行,如果去掉
//ThreadPool.QueueUserWorkItem( // new WaitCallback(WorkMethod), autoEvent);这段代码,
//autoEvent.WaitOne();之后的代码就永远不会运行了
//如果初始化为 true即 new AutoResetEvent(true),去掉 ThreadPool.QueueUserWorkItem( // new WaitCallback(WorkMethod), autoEvent);这段代码,
//autoEvent.WaitOne();之后的代码也可运行
static AutoResetEvent autoEvent = new AutoResetEvent(false);
static void Main()
{
Console.WriteLine("Main starting.");
ThreadPool.QueueUserWorkItem(
new WaitCallback(WorkMethod), autoEvent);
// Wait for work method to signal.
autoEvent.WaitOne();
Console.WriteLine("Work method signaled.\nMain ending.");
Console.ReadLine();
}
static void WorkMethod(object stateInfo)
{
Console.WriteLine("Work starting.");
// Simulate time spent working.
Thread.Sleep(new Random().Next(100, 2000));
// Signal that work is finished.
Console.WriteLine("Work ending.");
((AutoResetEvent)stateInfo).Set();
}
}
这是个人的一点点理解,希望大伙有好的意见再拍拍砖。。。。。。。
转载于:https://www.cnblogs.com/huaan011/p/3570918.html
基元线程同步构造之waithandle中 waitone使用相关推荐
- python中线程同步_Python线程同步在实际应用中功能体现
在Python编程语言中,对于线程的操作是一个比较重要的应用技术.我们将会在这篇文章中为大家详细介绍一下这方面的相关基础内容,Python线程同步的应用方式.多个执行线程经常要共享数据,如果仅仅读取共 ...
- CLR Via CSharp读书笔记(29) - 混合线程同步构造
{TODO:} 转载于:https://www.cnblogs.com/thlzhf/p/3494561.html
- 【转】1.4异步编程:轻量级线程同步基元对象
开始<异步编程:同步基元对象(下)> 示例:异步编程:轻量级线程同步基元对象.rar 在<异步编程:线程同步基元对象>中我介绍了.NET4.0之前为我们提供的各种同步基元(包括 ...
- [.Net线程处理系列]专题五:线程同步——事件构造
引言: 其实这部分内容应该是属于专题四,因为这篇也是讲关于线程同步的,但是由于考虑到用户的阅读习惯问题,因为文章太长了,很多人不是很愿意看包括我也是这样的,同时也有和我说可以把代码弄成折叠的,这样就不 ...
- 【转】3.3(译)构建Async同步基元,Part 3 AsyncCountdownEvent
传送门:异步编程系列目录-- 最近在学习.NET4.5关于"并行任务"的使用."并行任务"有自己的同步机制,没有显示给出类似如旧版本的:事件等待句柄.信号量.l ...
- JAVA中线程同步的方法(7种)汇总
JAVA中线程同步的方法(7种)汇总 同步的方法: 一.同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法. ...
- JAVA中线程同步的几种实现方法
JAVA中线程同步的几种实现方法 一.synchronized同步的方法: 1.synchronized同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁, ...
- 关于C语言中线程同步的方式
C语言中线程同步的方式 线程同步 互斥锁 读写锁 条件变量 信号量 线程同步 在多线程环境中,线程之间由于竞争共享资源(临界资源)容易引起数据不一致的问题.一般采用互斥锁(互斥信号量)解决,保证只有一 ...
- 细说C#多线程那些事 - 线程同步和多线程优先级
上个文章分享了一些多线程的一些基础的知识,今天我们继续学习. 一.Task类 上次我们说了线程池,线程池的QueueUserWorkItem()方法发起一次异步的线程执行很简单 但是该方法最大的问题是 ...
最新文章
- 织梦最新版后台一键更新网站、更新文档HTML卡死的解决方法
- Centos7 关闭防火墙(转)
- 利用Flume将MySQL表数据准实时抽取到HDFS
- activiti流程跟踪图简单详解
- c语言goto语句用法_硬件工程师必知的10个C语言技巧
- 判别式模型和生成式模型的区别(discriminative model and generative model)
- Chapter 1 First Sight——37
- Vs2010 上的配置Opencv2.2
- H264三种码率控制方法(CBR, VBR, CVBR,)CRF和CQP
- Java管理员登录界面视图_JAVA实现普通用户和管理员用户同页面登录
- 三菱FX系列PLC备份电池电压低报警的处理方法
- 计算机扫描变文档,原来电脑上的扫描仪功能这么好用!纸质文档轻松转为电子格式...
- 58、【backtrader股票策略】两资产的配对交易策略(pairs trading strategy)
- 网站安全防护该怎么做?有什么具体措施?
- 【Java成王之路】EE初阶第二十四篇: Servlet
- xml文件读写(C#)
- LTE中语音业务时怎样实现?
- 微信小程序:从本地相册选择图片、相机拍照,并将所选图片上传到服务器
- 银河麒麟系统Java/NetCore开发环境
- C++ primer 学习笔记
热门文章
- Vue3.0 Composition API与Vue2.x 使用的 Options API
- 蓝色简约好看的个人接单HTML源码
- CSS: 深入理解BFC和Margin Collapse (margin叠加或者合并外边距)
- Web开发者必备:Web应用检查清单
- javascript 实现禁止右键,复制,选取文本 (兼容firefox,IE,chrome等主流浏览器)...
- PHP 使用concat的无限分类
- 人工智障学习笔记——梯度下降(1)基础变种
- HTML——初识html,元素 属性 段落 文本格式化 链接 头部入门
- 【python】sys.stdout输出不换行
- 【算法学习】最优二叉查找树(动态规划)