前言

我们在使用线程的时候,如果多个线程数去访问一个资源的时候,那么是非常影响程序的运行的,因为如果有写的操作,那么需要写锁,那么线程都会堵在同一个地方,那么我们可以限制一下访问一个资源的线程数。

正文

static SemaphoreSlim _semaphore = new SemaphoreSlim(4);
static object x = new object();
static int y = 0;
static void Main(string[] args)
{
for (int i = 0; i <= 100; i++) {
string ThreadName = "Thread" + i;
int secondsToWait = 2;
var t = new Thread(() => AccessDataBase(ThreadName, secondsToWait));
// t.IsBackground = true;
t.Start();
}
} static void AccessDataBase(string name, int seconds)
{
Console.WriteLine($"{name }waits to access a database");
_semaphore.Wait();
lock (x)
{
y++;
}
Console.WriteLine("现在的正在执行的线程数为:" + y);
Console.WriteLine($"{name} was grants an access to a database");
Thread.Sleep(TimeSpan.FromSeconds(seconds));
lock (x)
{
y--;
}
_semaphore.Release(); Console.WriteLine($"{name} was completed");
}

在上面代码中,我创建了100个线程,然而正在执行的线程数一直只有4个。

这样我们就限制线程访问资源的频率,为什么我在_semaphore.Wait();里面还是加了lock呢?因为并发数依然为4。

c# semaphoreSlim限制线程数的更多相关文章

  1. Linux上如何查看物理CPU个数,核数,线程数

    首先,看看什么是超线程概念 超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的 ...

  2. 【原创】如何确定Kafka的分区数、key和consumer线程数

    在Kafak中国社区的qq群中,这个问题被提及的比例是相当高的,这也是Kafka用户最常碰到的问题之一.本文结合Kafka源码试图对该问题相关的因素进行探讨.希望对大家有所帮助.   怎么确定分区数? ...

  3. Nginx设置线程数为整机内核数的俩倍!

    Nginx设置线程数为整机内核数的俩倍!

  4. C++ win32线程数上限

    hThread = CreateThread( NULL,  0,  WorkerFunction,  &threadParm,  0, &dwThreadID  ); 这样的创建方法 ...

  5. .NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长

    一个 asp.net core 站点,之前运行在Linux 服务器上,运行一段时间后有时站点会挂掉,在日志中记录很多“EMFILE too many open files”的错误: Microsoft ...

  6. LINUX最大线程数及最大进程数

    查看最大线程数: cat /proc/sys/kernel/threads-max ulimit User limits - limit the use of system-wide resource ...

  7. IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的

    IIS连接数 一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,这边先从普通不懂代码用户角度理解IIS连接数 顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫" ...

  8. 聊下并发和Tomcat线程数(错误更正)

    本文前半部分结论存在严重错误,请看最后2015-1-20更新部分. 最近一直在解决线上一个问题,表现是: Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池 ...

  9. centos查看系统cpu个数、核心书、线程数

    1.查看物理cpu个数 grep 'physical id' /proc/cpuinfo | sort -u | wc -l 2.查看核心数量 grep 'core id' /proc/cpuinfo ...

  10. 【转】如何确定Kafka的分区数、key和consumer线程数

    文章来源:http://www.cnblogs.com/huxi2b/p/4583249.html -------------------------------------------------- ...

随机推荐

  1. ENVI为遥感影像设置空间坐标系的方法

      本文介绍基于ENVI软件,对不含有任何地理参考信息的栅格遥感影像添加地理坐标系或投影坐标系等地理参考信息的方法.   我们先来看一下本文需要实现的需求.现有以下两景遥感影像,其位于不同的空间位置: ...

  2. Ingress和Ingress Controller什么关系

    Ingress Controller和Ingress在Kubernetes(K8s)中各自扮演着不同的角色,但它们共同协作以实现外部访问集群内部服务的功能. Ingress是一个Kubernetes ...

  3. MySql注入—DNS注入

    MySql注入-DNS注入 1.DNS注入原理 一.DNS注入原理 DNS注入,是通过查询相应DNS解析产生的记录日志来获取想要的数据 对于sql盲注这样的方法常常用到二分法,非常麻烦而且没有回显,要 ...

  4. 引领文旅新体验!3DCAT实时云渲染助力打造“永不落幕”的湾区文采会元宇宙

    2022年11月25日至27日,2022年粤港澳大湾区公共文化和旅游产品(东莞)采购会(简称"湾区文采会")在广东省东莞市文化馆举行. 文采会期间,文采会元宇宙线上虚拟展厅全新亮相 ...

  5. (1)Python基础的一些教学资料和视频

    Python相关的一些书籍 链接: https://pan.baidu.com/s/1uVT_xQRShxsw2gRhjJhikA 密码: 5fgi Python的相关进阶课程 链接: https:/ ...

  6. uni之this作用域

    目录介绍 01.先看一个案例 02.看一下解决方案 01.先看一个案例 代码如下所示 发现了点击按钮1可以更新title内容,但是点击按钮2却无法更新title内容.这个究竟是为什么呢? <te ...

  7. npm install安装依赖包时报错npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node install.js,npm ERR! ChromeDriver installation failed Error with http(s) request: Error: read ECONNRESET

    PS E:\20231213\uirecorder> PS E:\20231213\uirecorder> PS E:\20231213\uirecorder> PS E:\2023 ...

  8. 记录--Vue3问题:如何实现组件拖拽实时预览功能?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 需求分析 实现一个CMS内容管理系统,在后台进行内容编辑,在官网更新展示内容. 关于后台的编辑功能,大致分为两部分:组件拖拽预览.组 ...

  9. Springboot访问html页面

    项目结构如图 1.html页面创建 在原有的项目resouces目录下创建static包,并在static下创建pages,然后在pages包下index.html. index.html内容 < ...

  10. verilog设计知识集合(2)

    verilog设计知识集合(2) 1.阻塞与非阻塞 阻塞赋值是存在先后关系的,非阻塞是不存在先后关系的.一般而言,阻塞用于组合逻辑,非阻塞用于时序逻辑(不一定).阻塞的执行时逐步赋值,非阻塞是同步赋值 ...