C# 线程同步 信号量 Semaphore
2011-09-02 10:59
495 查看
Semaphore 信号量, 用来限制可同时访问某一资源或资源池的线程数。
信号量维护了一个计数器, 计数器的值可以在0到指定的最大值之间。
当一个线程完成了对信号量的等待后, 信号量计数器值减少。
当一个线程稀放信号量时, 信号量计数器值增加。
当计数器值达到零后,信号量是"未标志的",当计数器值大于零时, 信号量是"标志的"。
任何线程都无法等待信号量变为"标志的", 因此信号量对限制可以共享数据的线程数量很有用处。
信号量维护了一个计数器, 计数器的值可以在0到指定的最大值之间。
当一个线程完成了对信号量的等待后, 信号量计数器值减少。
当一个线程稀放信号量时, 信号量计数器值增加。
当计数器值达到零后,信号量是"未标志的",当计数器值大于零时, 信号量是"标志的"。
任何线程都无法等待信号量变为"标志的", 因此信号量对限制可以共享数据的线程数量很有用处。
using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace ConsoleApplication1 { class Program { static Semaphore hSemaphore; //static Thread[] hThread; static int source = 0; static void Main(string[] args) { hSemaphore = new Semaphore(1, 3); Thread[] hThread = new Thread[4]; for (int i = 0; i < 4; i++) { hThread[i] = new Thread(new ThreadStart(Proc)); hThread[i].Name = string.Format("线程{0}", i + 1); hThread[i].Start(); //Thread t = new Thread(new ParameterizedThreadStart(Proc)); //t.Start(i); } //等待半秒直到所有线程都启动并获取信号量 //Thread.Sleep(5000); for (int i = 0; i < hThread.Length; i++) { hThread[i].Join(); } //释放信号量 //hSemaphore.Release(5); Console.ReadKey(); } static void Proc() { Console.WriteLine("{0} 开始等待信号量, 请求资源", Thread.CurrentThread.Name); hSemaphore.WaitOne(); Console.WriteLine("{0} 已经进入信号量, --使用资源--", Thread.CurrentThread.Name); source++; int p = Interlocked.Add(ref source, 100); Thread.Sleep(1000 + p); Console.WriteLine("{0} 已释放信号量, 原信号量数目: {1}", Thread.CurrentThread.Name, hSemaphore.Release()); } } }
相关文章推荐
- C# 线程同步(5)- 信号量 Semaphore
- C#线程同步(5)- 信号量 Semaphore
- C#线程同步(5)- 信号量 Semaphore
- 线程互斥与同步(part3)—解决线程同步的”扛把子“:单身狗-信号量( Semaphore)
- 线程同步--信号量Semaphore
- C# 多线程之一:信号量Semaphore
- C# 多线程之信号量Semaphore
- 线程同步的方式——Mutex(互斥量)、 Condition variable(条件变量)和Semaphore(信号量)
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
- 第9章 用内核对象进行线程同步(3)_信号量(semaphore)、互斥对象(mutex)
- C# 多线程之一:信号量Semaphore
- C# 多线程之一:信号量Semaphore
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
- C# 多线程之一:信号量Semaphore
- 【转载】C# 在线程同步中使用信号量
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
- C# 使用Semaphore(信号量)控制多线程
- 改善C#程序的建议6:在线程同步中使用信号量
- 线程同步----信号量(Semaphore)