Net Core教程

C# Semaphore 简单理解

本文主要是介绍C# Semaphore 简单理解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
信号量:主要作为进程之间以及同一进程的不同线程之间的同步和互斥手段。
可以把多线程比作马路,Semaphore比作红绿灯
比如马路有10车道,initialCount表示初次可通行数量,maximumCount最大可通行数量,比如设置为4,一次最多放4条,
   

主要方法

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();又释放下一条。依次释放完所有线程。

 

这篇关于C# Semaphore 简单理解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!