C#中的信号量---Semaphore
2021-05-14 14:29
标签:font imu ber 效果 zh-cn ima blog 有一个 logs Semaphore是System.Threading下的类,限制可同时访问某一资源或资源池的线程数。 常用构造方法 https://msdn.microsoft.com/zh-cn/library/e1hct27h(v=vs.110).aspx 可以同时授予的信号量的初始请求数。 可以同时授予的信号量的最大请求数。 示例代码 代码说明: static Semaphore sema = new Semaphore(1,1); 声明一个信号量,指示控制的资源初始和最大线程并发数为1 sema.WaitOne(); 使用以上两个方法控制资源,某个线程执行sema.WaitOne()方法时,若有其他线程已经占用资源,此方法将阻塞,直到,其他线程释放,即调用sema.Release();方法 执行效果如下: 同一段时间内,只有一个线程进入共享资源中。 以下是最大并发数为2的执行效果: static Semaphore sema = new Semaphore(2,2); 同一段时间内,有两个线程进入了贡献资源中 C#中的信号量---Semaphore 标签:font imu ber 效果 zh-cn ima blog 有一个 logs 原文地址:http://www.cnblogs.com/doublejun/p/7520347.htmlpublic Semaphore(
int initialCount,
int maximumCount
)
参数
class Program
{
static Semaphore sema = new Semaphore(1,1);
static void Main(string[] args)
{
for (int i = 0; i 3; i++)
{
var thread = new Thread(Test) { Name = $"Thread{ i }" };
thread.Start();
}
Console.ReadKey();
}
static void Test()
{
sema.WaitOne();
for (int i = 0; i 3; i++)
{
Console.WriteLine($"ThreadName:{ Thread.CurrentThread.Name} i:{i}");
Thread.Sleep(1000);
}
sema.Release();
Console.ReadKey();
}
}
for (int i = 0; i {
Console.WriteLine($"ThreadName:{ Thread.CurrentThread.Name} i:{i}");
Thread.Sleep(1000);
}
sema.Release();