ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C# Semaphore 简单理解

2022-01-17 06:00:18  阅读:216  来源: 互联网

标签:释放 C# 理解 线程 Semaphore Release new road


信号量:主要作为进程之间以及同一进程的不同线程之间的同步和互斥手段。
可以把多线程比作马路,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,Release,new,road
来源: https://www.cnblogs.com/cdaniu/p/15811990.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有