c# - 信号量 - 使用信号量运行得更快的任务
问题描述
我学校的任务是构建一个具有相同循环延迟但使用信号量更快地运行任务的代码。这是为了学习信号量。我制作了如下脚本,但是两个类似线程之间的延迟为 1.4 秒。有没有办法通过调整信号量来使程序运行得更快。
using System;
using System.Threading;
using System.Diagnostics;
//Example in using sleep() and Threads in C#
namespace ThreadSys
{
class ThreadClass
{
int loopDelay, loopCnt;
Thread cThread;
static Semaphore _sem = new Semaphore(1, 5);
public ThreadClass(string name, int delay)
{
loopCnt = 0;
loopDelay = delay;
cThread = new Thread(new ThreadStart(this.run));
cThread.Name = name;
cThread.Start();
}
// The main function in the ThreadClass
void run()
{
do
{
_sem.WaitOne();
Console.Write(cThread.Name + ":" + DateTime.Now.ToString(" HH:mm:ss.fff "));
Console.Write(cThread.Name + ":" + " Hello ");
Console.Write(cThread.Name + ":" + " A number ");
Console.Write(cThread.Name + ":" + " Year ");
Console.WriteLine();
Thread.Sleep(loopDelay);
loopCnt++;
_sem.Release();
} while (loopCnt < 40);
Console.WriteLine(cThread.Name + "*Finished* ");
}
}
// The application
class ThreadSys
{
static void Main(string[] args)
{
ThreadClass dt1 = new ThreadClass("[T1]", 95);
ThreadClass dt2 = new ThreadClass("[T2]", 191);
ThreadClass dt3 = new ThreadClass("[T3]", 287);
ThreadClass dt4 = new ThreadClass("[T4]", 383);
ThreadClass dt5 = new ThreadClass("[T5]", 479);
}
}
}
解决方案
推荐阅读
- single-sign-on - 在没有外部浏览器的情况下使用 sso 查询雪花
- c++ - C++中的双链表(指针内存访问冲突)
- git - 排除 .gitignore 中的文件夹,但包含以某个前缀开头的文件
- assembly - .data 数组中 MOVDQU 的“指令操作数必须相同大小”
- c# - EF Core 5 单属性投影
- django - 在 Django 框架中实现类似产品
- swift - 推断一个通用参数,指定其他参数
- r - 如何在R中绘制inc指数衰减?
- python - 从 python 将指标发送到 splunk
- assembly - 使用 lcd HD44780U LCD 4 位模式和 65c22 VIA 的问题(新手组装)