停止线程的信号量

本文关键字:信号量 线程 | 更新日期: 2023-09-27 18:01:54

下面的代码停在信号量上。

Code正确创建线程。当删除信号量代码时,它会正确运行。

如何让我的信号量阻塞代码段,这种情况下只是一个循环,然后在循环完成时释放信号量

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修改为您希望允许的并发访问数