Semaphore是System.Threading下的类,限制可同时访问某一资源或资源池的线程数。

常用构造方法

https://msdn.microsoft.com/zh-cn/library/e1hct27h(v=vs.110).aspx

public Semaphore(int initialCount,int maximumCount
)

参数

initialCount
Type: System.Int32

可以同时授予的信号量的初始请求数。

maximumCount
Type: System.Int32

可以同时授予的信号量的最大请求数。

示例代码

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();}}

代码说明:

static Semaphore sema = new Semaphore(1,1);

声明一个信号量,指示控制的资源初始和最大线程并发数为1

sema.WaitOne();
for (int i = 0; i < 3; i++)
{
Console.WriteLine($"ThreadName:{ Thread.CurrentThread.Name} i:{i}");
Thread.Sleep(1000);
}
sema.Release();

使用以上两个方法控制资源,某个线程执行sema.WaitOne()方法时,若有其他线程已经占用资源,此方法将阻塞,直到,其他线程释放,即调用sema.Release();方法

执行效果如下:

同一段时间内,只有一个线程进入共享资源中。

以下是最大并发数为2的执行效果:

static Semaphore sema = new Semaphore(2,2);

同一段时间内,有两个线程进入了贡献资源中

转载于:https://www.cnblogs.com/doublejun/p/7520347.html

C#中的信号量---Semaphore相关推荐

  1. 并发教程--JAVA5中 计数信号量(Counting Semaphore)例子

    并发教程--JAVA5中 计数信号量(COUNTING SEMAPHORE)例子 本文由 TonySpark 翻译自 Javarevisited.转载请参见文章末尾的要求. Java中的计数信息量(C ...

  2. 秒杀多线程第八篇 经典线程同步 信号量Semaphore

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...

  3. java semaphorewa_Java并发(十五):并发工具类——信号量Semaphore

    先做总结: 1.Semaphore是什么? Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源. 把它比作是控制流量的红绿灯,比如XX马路要 ...

  4. java 信号量Semaphore

    在很多情况下,可能有多个线程需要访问数目很少的资源.假想在服务器上运行着若干个回答客户端请求的线程.这些线程需要连接到同一数据库,但任一时刻 只能获得一定数目的数据库连接.你要怎样才能够有效地将这些固 ...

  5. 经典线程同步 信号量Semaphore

    信号量Semaphore常用有三个函数,使用很方便.下面是这几个函数的原型和使用说明. 第一个 CreateSemaphore 函数功能:创建信号量 函数原型: HANDLE CreateSemaph ...

  6. .Net 下信号量(Semaphore)的一种实现

    动机 从开始接触多线(进)程编程模型开始,学习的就是和信号量(Semaphore)相关的同步原语.不知道为什么 .Net Framework 里却没有相应的东东.要命的是, 我以前有很多久经考验的C+ ...

  7. python 信号量 semaphore

    信号量 信号量(英语:semaphore)又称为信号标, 是一个同步对象,用于保持在0至指定最大值之间的一个计数值. 当线程完成一次对该semaphore对象的等待(wait)时,该计数值减一: 当线 ...

  8. java多线程的同步控制_Java多线程并发控制工具信号量Semaphore,实现原理及案例...

    信号量(Semaphore)是Java多线程兵法中的一种JDK内置同步器,通过它可以实现多线程对公共资源的并发访问控制.一个线程在进入公共资源时需要先获取一个许可,如果获取不到许可则要等待其它线程释放 ...

  9. FreeRTOS中多种信号量

    信号量 信号量(Semaphore)是一种实现任务间通信的机制,可以实现任务之间同步或者临界资源的互斥访问,常用于协助一组互相竞争的任务来访问临界资源.在多任务系统中,各任务之间需要同步或者互斥实现临 ...

最新文章

  1. 农业银行联行号怎么查询_农行信用卡解析丨菜卡怎么提额8W?学会一招就够了!...
  2. 1、C语言面试笔试---变量定义和声明
  3. 获取周/月的第一天最后一天
  4. VTK:PolyData之InterpolateMeshOnGrid
  5. 斐波那契数列的3种求法及几种素数筛法
  6. 志愿者招募 | 2021 .NET Conf China
  7. python MultipartEncoder
  8. PostgreSQL 如何实现网络压缩传输或加密传输(openssl)
  9. nologging mysql_oraclenologgingoperation
  10. 利用matlab使用窗函数,MATLAB中的窗函数
  11. navicat+for+mysql10.0.11简体中文破解版
  12. 免费扫书的条形码API,PHP代码实例
  13. 解决git文件夹图标消失
  14. Cloudera Manager 配置
  15. 【应用笔记】【AN002】通过iTool2基于MinGW平台读写EEPROM
  16. linux安装程序企鹅,分享|Linux/Unix 桌面趣事:召唤一群企鹅在桌面上行走
  17. Android 欢迎引导页的魅力
  18. 鸿蒙系统安装第三方,网友表示:鸿蒙最新系统可以通过连接U盘安装第三方软件了...
  19. 正在使用计算机突然停电怎么办,电脑突然断电怎么办?电脑突然断电开不了机解决教程...
  20. UR5机器人学习之TCP/IP通讯

热门文章

  1. Oracle编程入门经典 第3章 建立以及管理用户和表
  2. 程序员面试题精选100题(41)-把数组排成最小的数[算法]
  3. 深度学习(二十三)Maxout网络学习-ICML 2013
  4. 如何设计一门语言(六)——exception和error code
  5. 分布式01-Dubbo基础背景
  6. java 使用webmagic 爬虫框架爬取博客园数据
  7. nginx(一)安装与命令总结
  8. JSP/ Servlet常见的中文乱码原因
  9. C#实现的【阿拉伯数字转换成中文大写金额】
  10. 基于matlab的lsb数字水印