线程同步之等待句柄
来源:互联网 发布:银行软件开发笔试 编辑:程序博客网 时间:2024/05/16 12:57
1、WaitHandle类是个抽象类,有方法:WaitOne()、WaitAll()、WaitAny(), 功能实现由其子类完成。
2、互斥同步对象Mutex,派生自WaitHandle类,有两个状态:onwed、unowned。
private Mutex m = new Mutex();public void DoSomething(){ m.WaitOne(); //.... m.ReleaseMutex();}
3、Semaphore类 管理多个共享资源(派生自WaitHandle类)
Semaphore可以同步多个线程对同一种类型多个共享资源访问。如果系统中拥有多中不同类型的资源,则可以创建多个Semaphore对象。
Mutex类是Semaphore的特殊情况,即资源数为1。
Semaphore类的构造函数:
public Semaphore (int initialCount, int maximumCount)
initialCount 表示目前剩余资源数
maximumCount 表示总资源数
示例:
private const int ComputerNum = 3;private Semaphore sp = new Semaphore(ComputerNum , ComputerNum);public void DoSomeThing(){ sp.WaitOne(); //资源数自动减一 //..... sp.Release(); //资源数自动加一}
多个线程同时执行,只要可用资源数>0
4、EventWaitHandle类,等待时间的发生
(1)ManualResetEvent类, xx.Set()时,允许一批线程运行。
(2)AutoResetEvent类, xx.Reset()时,允许线程阻塞队列里的一个线程运行。
示例1:
private static ManualResetEvent mre = new ManualResetEvent(false); //初始为“红灯”private static void ThreadProc(){ string name = Thread.CurrentThread.Name; Console.WriteLine(name + " starts and calls mre.WaitOne()"); mre.WaitOne(); Console.WriteLine(name + " ends.");} private static void Go(){ mre.Set();} private static void Stop(){ mre.Reset();}
- 线程同步之等待句柄
- (三)线程--等待句柄
- WaitForSingleObject 等待线程句柄
- C#线程等待句柄
- WaitForSingleObject 等待线程句柄
- C#多线程之同步事件和等待句柄
- qt线程同步之条件等待
- c# 线程同步: 详解lock,monitor,同步事件和等待句柄以及mutex
- c# 线程同步: 详解lock,monitor,同步事件和等待句柄以及mutex
- c# 线程同步: 详解lock,monitor,同步事件和等待句柄以及mutex (转)
- c# 线程同步: 详解lock,monitor,同步事件和等待句柄以及mutex(ZT)
- c# 线程同步:详解lock,monitor,同步事件和等待句柄以及mutex
- 多线程:C#线程同步lock,Monitor,Mutex,同步事件和等待句柄
- 多线程:C#线程同步lock,Monitor,Mutex,同步事件和等待句柄(上)(转)
- 多线程:C#线程同步lock,Monitor,Mutex,同步事件和等待句柄(中) (转)
- 多线程:C#线程同步lock,Monitor,Mutex,同步事件和等待句柄(下) (转)
- 多线程:C#线程同步lock,Monitor,Mutex,同步事件和等待句柄(上)
- 多线程:C#线程同步lock,Monitor,Mutex,同步事件和等待句柄(中)
- MEMORY-BOOK
- Flex学习
- 二、太空飞行计划问题 [最大权闭合图]
- ASP.NET获取IP的几种方法
- 调用empty而不是检查size()是否为0,来判断容器中是否有零个元素
- 线程同步之等待句柄
- 鸟哥的 Linux 私房菜 -- 学习 bash shell
- SharePoint2010母版页制作的简单介绍
- 黑马程序员_学习笔记16_Http协议初探
- 将药品类别表数据加载到页面的目录树中
- 数组在java与C++中的不同
- 静态测试
- html/css标题截断,设置固定长度标题
- 将10g RAC库用rman 的方式备份并恢复到异机