核心类:Semaphore,通过int数值来控制线程个数。

  * 通过观察构造函数 public Semaphore(int initialCount, int maximumCount);:

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

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

核心方法:WaitOne和Release

static Semaphore seLock = new Semaphore(1, 1); //只允许一个线程通过
{
seLock.WaitOne();
Console.WriteLine(num2++);
seLock.Release();
}

SemaphoreSlim:

轻量级的信号量实现SemaphoreSlim,其不但能够更加高效的实现信号量的功能,还提供了一个异步等待的API。

Demo:异步执行不阻塞主线程

        //同步执行
static void SemphoreTest()
{
Task[] tasks = new Task[10];
for (int i = 0; i < 10; i++)
{
semaphore.Wait();
//模拟做事情况
Console.WriteLine("excute");
Thread.Sleep(1000);
semaphore.Release();
}
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000);
Console.WriteLine("------");
}
}

//异步执行
static void SemphoreTestAsync()
{
Task[] tasks = new Task[10];
for (int i = 0; i < 10; i++)
{
tasks[i] = Task.Run(async () =>
{
await semaphore.WaitAsync();
//模拟做事情况
Console.WriteLine("excute");
Thread.Sleep(1000);
semaphore.Release();
});
}
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000);
Console.WriteLine("------");
} Task.WaitAll(tasks);
}

信号量-Semaphore、SemaphoreSlim的更多相关文章

  1. 【C#】【Thread】Semaphore/SemaphoreSlim信号量

    System.Threading.Semaphore 类表示一个命名(系统范围)信号量或本地信号量. 它是一个对 Win32 信号量对象的精简包装. Win32 信号量是计数信号量,可用于控制对资源池 ...

  2. C# 多线程之一:信号量Semaphore

    通过使用一个计数器对共享资源进行访问控制,Semaphore构造器需要提供初始化的计数器(信号量)大小以及最大的计数器大小 访问共享资源时,程序首先申请一个向Semaphore申请一个许可证,Sema ...

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

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

  4. 互斥锁Mutex与信号量Semaphore的区别

    转自互斥锁Mutex与信号量Semaphore的区别 多线程编程中,常常会遇到这两个概念:Mutex和Semaphore,两者之间区别如下: 有人做过如下类比: Mutex是一把钥匙,一个人拿了就可进 ...

  5. 信号量 Semaphore

    一.简介         信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用,负责协调各个线程, 以保证它们能够正确.合理的使用公共资源. Semaphore可以控制某个资源可被同时 ...

  6. windows核心编程-信号量(semaphore)

    线程同步的方式主要有:临界区.互斥区.事件.信号量四种方式. 前边讲过了互斥器线程同步-----windows核心编程-互斥器(Mutexes),这章我来介绍一下信号量(semaphore)线程同步. ...

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

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <且不超过最大资源数量. 第三个參数能够用来传出先前的资源计数,设为NULL表示不须要传出. 注意:当 ...

  8. 转:【Java并发编程】之二十三:并发新特性—信号量Semaphore(含代码)

    载请注明出处:http://blog.csdn.net/ns_code/article/details/17524153 在操作系统中,信号量是个很重要的概念,它在控制进程间的协作方面有着非常重要的作 ...

  9. 多线程面试题系列(8):经典线程同步 信号量Semaphore

    前面介绍了关键段CS.事件Event.互斥量Mutex在经典线程同步问题中的使用.本篇介绍用信号量Semaphore来解决这个问题. 首先也来看看如何使用信号量,信号量Semaphore常用有三个函数 ...

随机推荐

  1. 00JAVA语法基础_四则运算 01

    自动生成30道四则运算的数学题,当前只是简单符合出题,答题和判断的代码,还没做要求,所以现在只是能随机生成三十道100以内的加减法和九九乘法表的乘除法 package Sizeyunsuan; /** ...

  2. maven手动添加库文件

    项目应用到了ojdbc,dubbo等私有库,maven无法直接下载,需要手动下载后添加到maven本地库里面. 以下以ojdbc为例: 1.下载jar后,cmd添加到本地库: mvn install: ...

  3. bash对一个目录中文件名的遍历

    for var in *      对当前目录中文件名的遍历 for var in /xx/xx/* 对绝对路径目录的遍历 ${var##*/}  变量扩展取文件名的基名 $var =~ ^[0-9] ...

  4. VSCode 如何远程连接其他主机的 WSL2

    VSCode 如何远程连接其他主机的 WSL2 VSCode 的 Remote Deployment 插件对 WSL2 直接提供了支持,能够很方便的连接本机的 WSL2 ,但是并没有提供一个连接远程 ...

  5. BOM(Bill of Material)物料清单基础知识(一)

                                                                                            一.BOM的基础概念 概 ...

  6. Docker run 命令参数及使用

    Docker run 命令参数及使用 Docker run :创建一个新的容器并运行一个命令 语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTI ...

  7. 【Azure 应用服务】App Service 通过配置web.config来添加请求返回的响应头(Response Header)

    问题描述 在Azure App Service上部署了站点,想要在网站的响应头中加一个字段(Cache-Control),并设置为固定值(Cache-Control:no-store) 效果类似于本地 ...

  8. koa踩坑记录

    1.koa热更新用nodemon 2.koa中暂不支持import/export 3.只发送options请求,没有后续请求   当ctx.set('Access-Control-Allow-Cred ...

  9. Ghost ,博客系统代名词

    Ghost 博客系统是前 WordPress 的一些优秀员工的创业项目.项目仍然采用 100% 开源,加上官方的收费托管的商业模式,目前已经发展成为一个非常的博客系统. 为了更好的方便读者理解 Gho ...

  10. 为什么 WordPress 镜像用起来顺手?

    有用户朋友问,用已有WordPress镜像好?还是自己动手安装配置好? 答案:用Websoft9的相关镜像好(各大云市场的镜像提供商比较多,"真假李逵"的现象总是有的,我们只对We ...