[英]Implement Semaphore using Monitor.Wait(obj) and Monitor.Pulse(obj)
我有以下任务:
“普通”信号量
初始化为可用资源的数量。
操作:
request () - waits until the resource is released,
release () - releases the resource,
numberAvailable () - returns number available resources, the n
我尝试使用Semaphore
slim 来实现:
class Program
{
private const int InitialCount = 2;
private const int MaximumCount = 8;
static void Main()
{
var semaphoreObject = new SemaphoreSlim(InitialCount, MaximumCount);
var printerObject = new Printer();
for (int i = 0; i < 20; ++i)
{
int j = i;
Task.Factory.StartNew(() =>
{
Request(semaphoreObject);
printerObject.Print(j);
Release(semaphoreObject);
NumberAvailable(semaphoreObject);
});
}
Console.ReadLine();
}
private static void Request(SemaphoreSlim s)
{
s.Wait();
}
private static void Release(SemaphoreSlim s)
{
s.Release();
}
private static void NumberAvailable(SemaphoreSlim s)
{
Console.WriteLine($"Available resource: {s.CurrentCount}");
}
}
class Printer
{
public void Print(int documentToPrint)
{
Console.WriteLine("Printing document: " + documentToPrint);
Thread.Sleep(TimeSpan.FromSeconds(5));
}
}
但是现在,我需要使用 Monitor 类来做到这一点,所以我应该创建自己的信号量类。 但是我对如何改变它有点迷茫
我不会为你写代码,但这就是我要做的
请记住,这不是最好的方法。 对生产代码使用内部类型。 这只是为了让您开始进行锻炼等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.