C# Semaphore 简单理解

信号量:主要作为进程之间以及同一进程的不同线程之间的同步和互斥手段。
可以把多线程比作马路,Semaphore比作红绿灯
比如马路有10车道,initialCount表示初次可通行数量,maximumCount最大可通行数量,比如设置为4,一次最多放4条,
    C# Semaphore 简单理解

主要方法

Semaphore(1, 4):默认一次只能释放一条线程。手动设置Release的一次最大个数是4条线程

WaitOne()阻塞线程,等灯来
Release(N) 同时放行条数,最大不能超过maximumCount
Close()释放所有

使用方式1

有10个线程,同时只执行3条线程,每完成一个就Release一个,等待中的就补上去

 

 代码如下:

该代码会正常执行完成,并且释放所有线程,因为初始化话new Semaphore(1, 4)时候已经设置默认释放一条线程,这条线程执行完成后road.Release();又释放下一条。依次释放完所有线程。
 
Semaphore road = new Semaphore(1, 4);
for(int i = 0; i < 10; i++)
{
    new Thread(obj =>
    {
        int se = (int)obj;
        Console.WriteLine(se);
        road.WaitOne();

        Console.WriteLine("release{0}",obj);
        road.Release();//该线程执行完毕,后再释放一个线程
    }

    ).Start(i);



}
Thread.Sleep(1000);
//该代码会正常执行完成,并且释放说有线程,因为初始化话new Semaphore(1, 4)时候已经设置默认释放一条线程,这条线程执行完成后road.Release();又释放下一条。依次释放完所有线程。

 

上一篇:inputtype


下一篇:菜鸟学Java(十八)——异常