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