沐鸣登录 C# Semaphore类
2022/4/12 17:13:25
本文主要是介绍沐鸣登录 C# Semaphore类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
沐鸣登录信号量非常类似于互斥,其区别是,信号量可以同时由多个线程使用。信号量是一种计数的互斥锁定。使用信号量,可以定义允许同时访问受旗语锁定保护的资源的线程个数。如果需要限制可以访问可用资源的线程数,信号量就很有用。例如,如果系统有 3 个物理端口可用,就允许 3 个线程同时访问 I/O 端口,但第 4 个线程需要等待前 3 个线程中的一个释放资源。
.NET Core 为信号量功能提供了两个类 Semaphore 和SemaphoreSlim。Semaphore 类可以命名,使用系统范围内的资源,允许在不同进程之间同步。SemaphoreSlim 类是对较短等待时间进行了优化的轻型版本。
在杏鑫登录下面的示例应用程序中,在Main()方法中创建了 6 个任务和一个计数为 3 的信号量。在 Semaphore 类的构造函数中,定义了锁定个数的计数,它可以用信号量(第二个参数)来获得,还定义了最初释放的锁定数(第一个参数)。如果第一个参数的值小于第二个参数,它们的差就是已经分配线程的计数值。与互斥一样,也可以给信号量指定名称,使之在不同的进程之间共享。这里定义信号量时没有指定名称,所以它只能在这个进程中使用。在创建了 SemaphoreSlim 对象之后,启动 6个任务,它们都获得了相同的信号量。
class Program { static void Main() { int taskCount = 6; int semaphoreCount = 3; var semaphore = new SemaphoreSlim(semaphoreCount, semaphoreCount); var tasks = new Task[taskCount]; for (int i = 0; i < taskCount; i++) { tasks[i] = Task.Run(() => TaskMain(semaphore)); } Task.WaitAll(tasks); Console.WriteLine("All tasks finished"); } //...
任务的主方法 TaskMain() 中,任务利用 Wait() 方法锁定信号量。信号量的计数是 3,所以有 3 个任务可以得锁定。第 4 个任务必须等待,这里还定义了最长的等待时间为 600 毫秒。如果在该等待时间过后未能获得,任务就把一条消息写入控制台,在循环中继续等待。只要获得了锁定,线程就把一条消息写入控制台,眠一段时间,然后解除锁定。在解除锁定时,在任何情况下一定要解除资源的锁定,这一点很重要。这就是在 finally 处理程序中调用 SemaphoreSlim 类的 Release() 方法的原因。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
//...
public static void TaskMain(SemaphoreSlim semaphore)
{
bool isCompleted = false ;
while (!isCompleted)
{
if (semaphore.Wait(600))
{
try
{
Console.WriteLine($ "Task {Task.CurrentId} locks the semaphore" );
Task.Delay(2000).Wait();
}
finally
{
Console.WriteLine($ "Task {Task.CurrentId} releases the semaphore" );
semaphore.Release();
isCompleted = true ;
}
}
else
{
Consloe.WriteLine($ "Timeout for task {Task.CurrentID}; wait again" );
}
}
}
|
UNDEFINED 复制 全屏
二、沐鸣登录 数据库
1、搭建高可用的etcd集群,集群规模增大时可以自动增加etcd节点;
目前的解决方案是使用etcd operator来搭建etcd 集群,operator是CoreOS推出的旨在简化复杂有状态应用管理的框架,它是一个感知应用状态的控制器,通过扩展Kubernetes API来自动创建、管理和配置应用实例。
etcd operator 有如下特性:
- ceate/destroy: 自动部署和删除 etcd 集群,不需要人额外干预配置。
- resize:可以动态实现 etcd 集群的扩缩容。
- backup:支持etcd集群的数据备份和集群恢复重建
- upgrade:可以实现在升级etcd集群时不中断服务。
2、配置etcd使用ssd固态盘存储;
3、设置 —quota-backend-bytes 增大etcd的存储限制。默认值是 2G;
4、需要配置单独的 Etcd 集群存储 kube-apiserver 的 event。
数据库
1、搭建高可用的etcd集群,集群规模增大时可以自动增加etcd节点;
目前的解决方案是使用etcd operator来搭建etcd 集群,operator是CoreOS推出的旨在简化复杂有状态应用管理的框架,它是一个感知应用状态的控制器,通过扩展Kubernetes API来自动创建、管理和配置应用实例。
etcd operator 有如下特性:
- ceate/destroy: 自动部署和删除 etcd 集群,不需要人额外干预配置。
- resize:可以动态实现 etcd 集群的扩缩容。
- backup:支持etcd集群的数据备份和集群恢复重建
- upgrade:可以实现在升级etcd集群时不中断服务。
2、配置etcd使用ssd固态盘存储;
3、设置 —quota-backend-bytes 增大etcd的存储限制。默认值是 2G;
4、需要配置单独的 Etcd 集群存储 kube-apiserver 的 event。
这篇关于沐鸣登录 C# Semaphore类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具
- 2024-01-24.NET集成IdGenerator生成分布式全局唯一ID
- 2024-01-23用CI/CD工具Vela部署Elasticsearch + C# 如何使用
- 2024-01-23.NET开源的简单、快速、强大的前后端分离后台权限管理系统