c# semaphoreSlim限制线程数
前言
我们在使用线程的时候,如果多个线程数去访问一个资源的时候,那么是非常影响程序的运行的,因为如果有写的操作,那么需要写锁,那么线程都会堵在同一个地方,那么我们可以限制一下访问一个资源的线程数。
正文
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限制线程数的更多相关文章
- Linux上如何查看物理CPU个数,核数,线程数
首先,看看什么是超线程概念 超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的 ...
- 【原创】如何确定Kafka的分区数、key和consumer线程数
在Kafak中国社区的qq群中,这个问题被提及的比例是相当高的,这也是Kafka用户最常碰到的问题之一.本文结合Kafka源码试图对该问题相关的因素进行探讨.希望对大家有所帮助. 怎么确定分区数? ...
- Nginx设置线程数为整机内核数的俩倍!
Nginx设置线程数为整机内核数的俩倍!
- C++ win32线程数上限
hThread = CreateThread( NULL, 0, WorkerFunction, &threadParm, 0, &dwThreadID ); 这样的创建方法 ...
- .NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长
一个 asp.net core 站点,之前运行在Linux 服务器上,运行一段时间后有时站点会挂掉,在日志中记录很多“EMFILE too many open files”的错误: Microsoft ...
- LINUX最大线程数及最大进程数
查看最大线程数: cat /proc/sys/kernel/threads-max ulimit User limits - limit the use of system-wide resource ...
- IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的
IIS连接数 一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,这边先从普通不懂代码用户角度理解IIS连接数 顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫" ...
- 聊下并发和Tomcat线程数(错误更正)
本文前半部分结论存在严重错误,请看最后2015-1-20更新部分. 最近一直在解决线上一个问题,表现是: Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池 ...
- centos查看系统cpu个数、核心书、线程数
1.查看物理cpu个数 grep 'physical id' /proc/cpuinfo | sort -u | wc -l 2.查看核心数量 grep 'core id' /proc/cpuinfo ...
- 【转】如何确定Kafka的分区数、key和consumer线程数
文章来源:http://www.cnblogs.com/huxi2b/p/4583249.html -------------------------------------------------- ...
随机推荐
- 探究WPF中文字模糊的问题:TextOptions的用法
有网友问WPF中一些文字模糊是什么问题.之前我也没有认真思考过这个问题,只是大概知道和WPF的像素对齐(pixel snapping).抗锯齿(anti-aliasing)有关,通过设置附加属性Tex ...
- 摆脱鼠标系列 - vscode 软件 最大化快捷键 - win + ↑
摆脱鼠标系列 - vscode 软件 最大化快捷键 - win + ↑ vscode默认打开不是最大化,所以按 win + 上箭头 使其最大化 不想按 F11 那个不太方便,左上角就没有项目名称了 优 ...
- 记一次配置mybatis plus报错有感
参考,欢迎点击原文:https://blog.csdn.net/wwrzyy/article/details/86034458(问题原因) https://www.jianshu.com/p/28d6 ...
- 大端(big endian) 小端(little endian) --- 在多字节存储 和 多字节通信中的含义(我还是太年轻了)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- clickhouse 安装和远程登录开启
一.Clickhouse的安装 1.添加yum源 yum-config-manager --add-repo http://repo.red-soft.biz/repos/clickhouse/rep ...
- [TM4]TM4C123G使用笔记
[TM4]TM4C123G使用笔记 TI的板子真让人头大甚至重装了两遍KEIL5 如何用keil5新建工程可以参考如下博客: https://blog.csdn.net/D_XingGuang/art ...
- 记录--实现一个鼠标框选的功能,要怎么实现和设计 api?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 前两年在一家做电商的公司做了一个需求:鼠标框选商品卡片,开始拖拽的时候合成一个然后改变位置,页面上有几千个所以还要结合虚拟列表.当时 ...
- AI实用指南:5分钟搭建你自己的LLM聊天应用
今天,我们将迅速着手搭建一个高效且富有创意的混元聊天应用,其核心理念可以用一个字来概括--快.在这个快节奏的时代,构建一个基础的LLM(Large Language Model,大型语言模型)聊天应用 ...
- NPM包管理器
一.简介 1.NPM全称Node Package Manager,是Node.js包管理工具,是全球最大的模块生态系统,里面所有的模块都是开源免费的:也是Node.js的包管理工具,相当于Maven. ...
- KingbaseES 逻辑读与物理读
oracle数据库中逻辑读,物理读 数据访问方式:数据库少不了和操作系统进行数据交互,表数据最好的方式是从数据库共享池中访问到,避免发生磁盘IO,当然如果共享池中没有访问到数据就难免发生磁盘IO. 物 ...