【发布时间】:2021-12-10 09:04:24
【问题描述】:
我有以下任务:
“普通”信号量
初始化为可用资源的数量。
操作:
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 类来做到这一点,所以我应该创建自己的信号量类。但是我对如何改变它有点迷茫
【问题讨论】: