信号量的使用 ManualResetEvent
2024-09-06 01:27:40
线程的等待时可以用这个,不论是线程池还是线程都可以用这个做等待。
ManualResetEvent md=new ManualResetEvent(false);//这个false 设置线程等待, true 允许线程不待等
IAsyncResult result= new Action<string>((t) =>
{
Console.WriteLine(t);
mre.Set();//允许线程不用继续等待,可以执行下去
}).BeginInvoke("你好",null,null);
mre.WaitOne();//主线程被卡在这里,等待信号量变成true(mre.Set()这个方法后就可变为true不用等待)
Console.WriteLine("你吃饭了么!");
mre.Reset();//重新设为线程等待
IAsyncResult result01= new Action<string>((t) =>
{
Console.WriteLine(t);
mre.Set();//设置线程不用继续等待,可以执行下去
}).BeginInvoke("还没吃",null,null);
mre.WaitOne();//又被阻塞了
Console.WriteLine("一起吃饭吧!");
//输出结果
你好
你吃饭了么!
还没吃
一起吃饭吧!
//线程池中的使用
mre.Reset();
ThreadPool.QueueUserWorkItem((t) =>
{
Console.WriteLine("我是从线程池中走出的线程!");
mre.Set();
});
mre.WaitOne();
当然也可以用循环待等的执行的方式进行线程待等
while (!result.IsCompleted)
{
Thread.Sleep(500);
Console.WriteLine("我在等你回复!");
}
Console.WriteLine("我吃了!");
最新文章
- 大气散射 GPU Gems2 Chapter 16. Accurate Atmospheric Scattering
- 基于jquery封装的颜色下拉选择框
- texstudio on ubuntu 12.04
- 修改oracle密码有效期限制
- Lua中调用C函数
- JQuery的复选框选中、取消、全选,全不选问题
- [BILL WEI] stimulsoft 分组页眉页脚的使用
- 搭建Git本地服务器
- WPF实现窗体最小化后小图标在右边任务栏下
- 动态分配内存补充 realloc
- 转:触屏中的js事件
- 直接在script里面换样式IE6,7,8不兼容
- python获取当前运行程序的名字
- AspNetCoreMvc使用MongoDB,快来get一下吧。
- 解决Loading class `com.mysql.jdbc.Driver&#39;. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver&#39;.
- Android Stuido 方法参数 p0,p1
- .NET分布式缓存Memcached从入门到实战
- ionic入门教程-ionic路由详解(state、route、resolve)(转)
- JavaScript中的递归
- DedeCMS中channelartlist自增参数global.itemindex
热门文章
- 回顾Servlet及SpringMVC
- mybatis框架之装饰模式
- 替换OSD操作的优化与分析
- PHP curl_exec函数
- JS中的setTimeout()函数
- Python基础教程(022)--Pycharm快速体验
- LOJ 6436 「PKUSC2018」神仙的游戏——思路+卷积
- 用K-近邻算法分类和回归
- Markdown ![...](...) -->; <;img ... />;
- urllib爬取实例