Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重置信号量_C#_Multithreading - Fatal编程技术网

C# 重置信号量

C# 重置信号量,c#,multithreading,C#,Multithreading,重置有线程等待的信号量的最佳方法是什么。现在,我所能想到的只是做一个while循环并释放信号量,直到信号量完全异常发生。我不确定什么是最佳实践 semaphore.Close(); semaphore = new Semaphore(0,1); 或 如果您想这样做,您确定要从信号量开始吗?也许a更合适?除了执行显示的循环之外,没有其他方法可以确保现有信号量已满。如果你真的想这样做,那么你的方法就是方法。但是,您可能应该将catch更改为catch(信号量lexception) 也就是说,做你所

重置有线程等待的信号量的最佳方法是什么。现在,我所能想到的只是做一个while循环并释放信号量,直到信号量完全异常发生。我不确定什么是最佳实践

semaphore.Close();
semaphore = new Semaphore(0,1);


如果您想这样做,您确定要从
信号量开始吗?也许a更合适?

除了执行显示的循环之外,没有其他方法可以确保现有信号量已满。如果你真的想这样做,那么你的方法就是方法。但是,您可能应该将
catch
更改为
catch(信号量lexception)

也就是说,做你所说的事情有特别的危险。如果其他线程在您开始填充信号量之前获取了该信号量,或者在您尝试填充信号量时对该信号量执行
WaitOne
,那么当该线程执行
Release
,它将获得
信号量lexception

如果您正在“重置”程序以准备开始新的运行或其他操作,那么您的第一个示例就是:销毁信号量并创建一个新的信号量。当然,在此之前,您需要确保没有任何活动线程希望使用旧的信号量

while(true)
{
   try
   {
      semaphore.Release();
   }
   catch
   {
      break;
   }
}
semaphore = new Semaphore(0,1);