C# 多线程之一:信号量Semaphore
2012-06-05 14:04
423 查看
Semaphore的理解
通过使用一个计数器对共享资源进行访问控制,Semaphore构造器需要提供初始化的计数器(信号量)大小以及最大的计数器大小
访问共享资源时,程序首先申请一个向Semaphore申请一个许可证,Semaphore的许可证计数器相应的减一,当计数器为0时,其他申请该信号量许可证的线程将被堵赛,直到先前已经申请到许可证的线程释放他占用的许可证让计数器加一,这样最近去申请许可证的线程将会得到竞争得到被释放的许可证。
常见的操作方法 WaitOne():申请一个许可证 Release():释放占用的许可证
具体使用看下面的示例代码:
程序执行结果为:
http://blog.163.com/charley_yangs/blog/static/1737078372010931112723748/
.
通过使用一个计数器对共享资源进行访问控制,Semaphore构造器需要提供初始化的计数器(信号量)大小以及最大的计数器大小
访问共享资源时,程序首先申请一个向Semaphore申请一个许可证,Semaphore的许可证计数器相应的减一,当计数器为0时,其他申请该信号量许可证的线程将被堵赛,直到先前已经申请到许可证的线程释放他占用的许可证让计数器加一,这样最近去申请许可证的线程将会得到竞争得到被释放的许可证。
常见的操作方法 WaitOne():申请一个许可证 Release():释放占用的许可证
具体使用看下面的示例代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace MutiThread { /// <summary> /// .net 信号量Semaphore的使用 /// </summary> class Program { static void Main(string[] args) { //初始化4个线程 Mythread mythrd1 = new Mythread("Thrd #1"); Mythread mythrd2 = new Mythread("Thrd #2"); Mythread mythrd3 = new Mythread("Thrd #3"); Mythread mythrd4 = new Mythread("Thrd #4"); //Join()方法阻塞调用线程 //达到主线程在4个子线程执行完毕才退出的目的 mythrd1.thrd.Join(); mythrd2.thrd.Join(); mythrd3.thrd.Join(); mythrd4.thrd.Join(); } } /// <summary> /// 封装线程类 /// </summary> class Mythread { public Thread thrd; //创建一个可授权2个许可证的信号量,且初始值为2 static Semaphore sem = new Semaphore(2, 2); public Mythread(string name) { thrd = new Thread(this.run); thrd.Name = name; thrd.Start(); } void run() { Console.WriteLine(thrd.Name + "正在等待一个许可证……"); //申请一个许可证 sem.WaitOne(); Console.WriteLine(thrd.Name + "申请到许可证……"); for (int i = 0; i < 4; i++) { Console.WriteLine(thrd.Name + ": " + i); Thread.Sleep(1000); } Console.WriteLine(thrd.Name + " 释放许可证……"); //释放许可证 sem.Release(); } } }
程序执行结果为:
http://blog.163.com/charley_yangs/blog/static/1737078372010931112723748/
.
相关文章推荐
- C# 多线程之一:信号量Semaphore
- c# 多线程 --Semaphore(信号量)
- C# 多线程之信号量Semaphore
- C# 使用Semaphore(信号量)控制多线程
- C# 使用Semaphore(信号量)控制多线程
- C# 多线程之信号量Semaphore
- C# 多线程之一:信号量Semaphore
- C# 多线程之一:信号量Semaphore
- C# 多线程之一:信号量Semaphore
- C# 多线程之一:信号量Semaphore
- Java多线程-新特征-信号量Semaphore
- Android使用信号量Semaphore进行多线程任务调度
- Java多线程之Semaphore信号量
- Java多线程-新特征-信号量Semaphore
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
- java多线程-Semaphore信号量使用
- java多线程控制-信号量Semaphore
- JAVA多线程--信号量(Semaphore)
- 【C#】【Thread】Semaphore/SemaphoreSlim信号量
- 多线程第五篇 经典线程同步之信号量Semaphore