c# - 信号量停止我的线程

标签 c# multithreading semaphore

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

代码正确地创建了线程。当信号量代码被删除时,它可以正确运行。

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

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/

相关文章:

c# - 如何更改表单标题的字体大小?

c 信号量和共享内存操作计数器

java - 多线程java图像阈值处理

java - 多线程:为什么这个输出?它是确定性的吗?

c - fork 的子进程是否使用相同的信号量?

c++ - 等待信号量的进程调度

c# - 有关显示图形和图表的建议

c# - 删除空格验证 ASP 控件

c# - 运行具有连续值返回的多个线程(ping 程序)

ruby-on-rails - Puma 线程如何与 Postgres 连接池交互?