我下面的代码在信号量上停止。
代码正确地创建了线程。当信号量代码被删除时,它可以正确运行。
如何让我的信号量阻塞代码段,这种情况只是一个循环,然后在循环完成后释放信号量。
lock
loop
un-lock
实际代码在这里:
using System.IO;
using System;
using System.Threading;
public class Program
{
public static Semaphore sema;
static void Main()
{
sema = new Semaphore(0, 2);
Work w = new Work();
Thread t = new Thread(w.doWork);
t.Start(null);
}
}
public class Work
{
public void doWork(object data)
{
Program.sema.WaitOne();
for(int i = 0; i < 10; i++)
Console.WriteLine("I made it");
Program.sema.Release();
}
}
最佳答案
信号量最初是关闭的,因为没有可用的空闲槽。在您能够越过 WaitOne()
调用之前必须有一些空闲。
sema = new Semaphore(0, 2);
这里是允许0个进入,需要修改0为你要允许的并发访问数。
关于c# - 信号量停止我的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23468442/