您需要限制为 1 且超时时间为 0 毫秒的信号量
通过使用 Semaphore,您可以说一次只有有限数量的线程可以访问一段代码。
请参阅此示例以了解如何使用它
您需要使用此方法等待
bool WaitOne(int millisecondsTimeout)
指定超时时间 = 0;这样,您的等待线程将等待 0 秒,这意味着它们将简单地跳过代码
例子
class SemaphoreExample
{
// Three reserved slots for threads
public static Semaphore Pool = new Semaphore(1, 0);
public static void Main(string[] args)
{
// Create and start 20 threads
for (int i = 0; i < 20; i++)
{
Thread t = new Thread(new ThreadStart(DoWork));
t.Start();
}
Console.ReadLine();
}
private static void DoWork()
{
// Wait 0 miliseconds
SemaphoreExample.Pool.WaitOne(0);
#region Area Protected By Semaphore
Console.WriteLine("Acquired slot...");
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i + 1);
}
Console.WriteLine("Released slot...");
#endregion
// Release the semaphore slot
SemaphoreExample.Pool.Release();
}
}