我的以下代码在信号灯上暂停。

代码正确创建线程。删除信号量代码后,它可以正确运行。

我如何使信号量阻塞代码部分,这种情况只是一个循环,然后在循环完成后释放信号量。

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();
  }
}

最佳答案

信号灯最初是关闭的,因为没有可用的插槽。您必须先有一些免费 Activity ,然后才能跨过WaitOne()调用。

sema = new Semaphore(0, 2);

这允许输入0,您需要将0修改为要允许的并发访问数。

关于c# - 信号量停止我的线程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23468442/

10-09 02:34