C#Semaphore信号量用法

参考博客:http://www.cnblogs.com/free722/archive/2011/04/03/2004926.html

http://www.cnblogs.com/heqichang/archive/2011/12/24/2300301.html

信号量说简单点就是为了线程同步,或者说是为了限制线程能运行的数量。

那它又是怎么限制线程的数量的哩?是因为它内部有个计数器,比如你想限制最多5个线程运行,那么这个计数器的值就会被设置成5,如果一个线程调用了 这个Semaphore,那么它的计数器就会相应的减1,直到这个计数器变为0。这时,如果有另一个线程继续调用这个Semaphore,那么这个线程就 会被阻塞。

获得Semaphore的线程处理完它的逻辑之后,你就可以调用它的Release()函数将它的计数器重新加1,这样其它被阻塞的线程就可以得到调用了。

    class SemaphoreDemo{static Semaphore semaphore;static void Main(string[] args){//创建一个限制资源类//资源数为5,开放资源数为2//主线程自动占有3个资源semaphore = new Semaphore(2, 5);//开启3个线程,让它们竞争剩余的2个资源for (int i = 0; i < 3; i++){Thread t = new Thread(new ParameterizedThreadStart(WorkerProc));t.Name = "Thread" + i;t.Start(t.Name);}System.Console.ReadKey();}static void WorkerProc(Object obj){Console.WriteLine(string.Format("线程:{0}准备执行",obj));semaphore.WaitOne();Console.WriteLine(string.Format("线程:{0}开始执行了,停留5秒钟", obj));Thread.Sleep(5000);Console.WriteLine(string.Format("线程:{0}执行结束了,释放信号量", obj));semaphore.Release();}

 

转载于:https://www.cnblogs.com/zyhblogs/p/4002046.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OC基础--OC中的类方法和对象方法

PS:个人感觉跟C#的静态方法和非静态方法有点类似&#xff0c;仅仅是有点类似。明杰老师说过不要总跟之前学过的语言做比较&#xff0c;但是个人觉得&#xff0c;比较一下可以加深印象吧。重点是自己真的能够区分开&#xff01; 一、OC中的对象方法 1.以减号“-”开头 2.只能让对…

linux vnc 改端口号,RHEL6下配置vncserver服务(包括修改vnc端口)

RHEL6下配置vncserver服务(包括修改vnc端口)(2012-04-13 23:36:07)标签&#xff1a;it配置完vsftpd后&#xff0c;还必须要开的服务就是vnc啦&#xff0c;首先&#xff0c;在root用户下利用yum源安装vncserver:yum list | grep vncyum install tigervnc-server.i686安装完成后&…

简单Linq笔记

Linq是.net 3.5才引入的 要引入命名空间System.Linq. Linq to XML要引入System.Xml.Linq Linq to ADO.NET要引入System.Data.Linq 每个Linq查询都是以from子句开始,Linq查询中,select子句和select子句都是必备子句.Linq查询表达式 必须以select或group子句结束 from字句包括两…

Groovy在Spring中的简单使用实例

2019独角兽企业重金招聘Python工程师标准>>> 步骤一&#xff1a; 如果你使用的是Eclipse,则需先添加groovy插件&#xff0c;以便操作groovy文件。 可参&#xff1a;http://blog.csdn.net/haigenwong/article/details/22947075 步骤二&#xff1a; 步骤三&#xff1a…

linux6个服务级别,RHEL 6 和 RHEL 7 的一些有关运行级别,服务管理,服务启动等方面的区别介绍...

systemd是7中的新命令组&#xff0c;集成了service和chkconfig的功能。system命令可参考&#xff1a;https://www.cnblogs.com/ray-bk/p/10415173.html运行级别概念的区分System V init 运行级别 systemd 目标名称 作用0 …

.net core 2.0学习记录(一):搭建一个.Net Core网站项目

.Net Core开发可以使用Visual Studio 2017或者Visual Studio Code,下面使用Visual Studio 2017搭建一个.net Core MVC网站项目。 一.新建项目 二.选择 Web应用程序(模型视图控制器) 三.项目结构和之前的比对还是有很大的不同,wwwroot用来存放前端的一些静态资源(css/js/image/h…

一个APP的由来

之前在站酷、UI中国、优设等网站看过不少的APP教程、规范等一些东西。自认为有些规范讲的内容过于繁琐&#xff0c;对于像我这样的大多数设计师来说看着看着就懵逼了.... 如何联系我&#xff1a;【万里虎】www.bravetiger.cn 【QQ】3396726884 &#xff08;咨询问题100元起&…

【easy】234. Palindrome Linked List

ques: 判断一个链表是否回文 Could you do it in O(n) time and O(1) space? method&#xff1a;先将链表分为两部分&#xff0c;将后半部分反转&#xff0c;最后从前往后判断是否相等。 topic: 链表&#xff0c;链表反转 /** * Definition for singly-linked list. * public …

linux qt 添加.so,Linux环境下qt/qt creator添加OpenCV的配置

第一次使用qtcreator&#xff0c;我是做图像处理的&#xff0c;想在Ubuntu下将qtcreator和opencv的环境配置起来&#xff0c;着资料和尝试配置&#xff0c;耗费了我一个上午和一个下午&#xff0c;终于最终摸出了门路&#xff0c;以供大家分享。第一步&#xff1a;下载和安装op…

算法纲要

基本 枚举、贪心、递归、分治、递推、模拟 STL&#xff08;pair、vector、set、map、queue、string、algorithm&#xff09; 构造、位运算、常数优化 数据结构 队列、堆、栈、链表 排序&#xff08;插入、冒泡、快速、归并、堆、桶、基数&#xff09; 二分查找、散列表 并查集、…

Auto Layout 和 Constraints

文章修改 2月1日&#xff1a;添加使用约束、编辑约束和iOS特性三个部分2月24日&#xff1a;根据自己的理解&#xff0c;修改iOS特性部分的内容 自动布局Auto Layout Auto Layout&#xff0c;通过设置在View上的约束&#xff0c;动态计算视图层次结构中所有的View的尺寸和位置。…

哪个linux桌面有电池显示,(求助!!!)进ubuntu后桌面只显示左上角!(已解决)...

jonathan303 于 2008-10-24 18:23:45发表:G卡 好说了 因为你们有配置你的显卡文件 你在系统里-》有一个显卡的调节程序&#xff0c; 你打开的时候里面没有显示&#xff0c; 你进行一下操作&#xff1a;sudo dpkg-reconfigure xserver-xorg一路默认cltaltbackspace重启X执行步骤…

Linux NTP时间服务器

NTP 时间服务器 ntp也是一种协议 ntp软件&#xff08;支持ntp协议&#xff09; CentOS6自带 CentOS7需要安装 chrony软件&#xff08;支持ntp协议&#xff09; CentOS7自带 安装ntp CentOS6系统自带ntp&#xff0c;CentOS7需要自己安装 [rootm02 ~]# yum -y install ntp [ro…

Host 'xxx' is not allowed to connect to this MySQL server.

mysql开启远程连接 今天在服务器安装了mysql&#xff0c;准备用mysqlguitools远程登录的时候出错&#xff0c;提示&#xff1a;Host xxx is not allowed to connect to this MySQL server。网上找了一些资料&#xff0c;是mysql未开启mysql远程访问权限导致。 记录解决方案供以…

tkinter的GUI设计:界面与逻辑分离(三)-- 多页面

知识点&#xff1a; 使用 tkinter.Frame.tkraise() 函数去提升当前 tkinter.Frame 的 z 轴顺序&#xff0c;使得多个 tkinter.Frame 的可见性得以切换 本文基于&#xff1a;win7 python34 1 2 3 4 5 import matplotlib matplotlib.use("TkAgg")from matplotlib.back…

linux软件证券,linux

1.说明在*nix环境下&#xff0c;经常通过源码安装软件。./configure make make install基本上都是定式了。本文对于configure的基本原理进行阐述&#xff0c;并借助http://concurrencykit.org/开源包的configure文件&#xff0c;对于实际的运行过程进行分析。2.configure基本背…

0x08算法设计与分析复习(二):算法设计策略-回溯法2

参考书籍&#xff1a;算法设计与分析——C语言描述&#xff08;第二版&#xff09; 算法设计策略-回溯法 子集和数 问题描述 已知n个不同的正数wi(0≤i≤n−1)的集合&#xff0c;求该集合的所有满足条件的子集&#xff0c;使得每个子集中的正数之和等于另一个给定的正数M。 回溯…

Android源码解析--SwipeMenuListView仿QQ聊天左滑

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/50612714 绪论&#xff1a; 好久没写博客了&#xff0c;最近比较懒&#xff0c;不想写博客&#xff0c;但是在看书&#xff0c;看一些Android进阶的书&#…

UVA 125 Numbering Paths

题意 给出方向&#xff08;有向&#xff09;然后判断从一个点到另一个点的方案数。如果有无数条那么对应位置置为-1 直接先dp处理出来。dp[i][j] sum(dp[i][k]*dp[k][j]) 同时如果两点之间有无限条路径。那么这两点之间必然有一环存在。有f[k][k]!0 #include <map> #…

linux 循环执行ip停止服务,java调用远程服务器的shell脚本以及停止的方法实现

最近接了个需求&#xff0c;要求远程调shell脚本&#xff0c;你没听错&#xff01;&#xff01;&#xff01;需求就一句话&#xff0c;咱是谁&#xff0c;咱是优秀的开发选手。考虑再三&#xff0c;有两种实现方式&#xff1a;方案一&#xff1a;脚本所在服务器安装一个客户端&…