如果一个信号量中有多个线程抛出异常,会发生什么?
假设一个sempahore可以有10个线程,这些线程可以一次进入,thread# 2,5,6,7,9将抛出异常,那么其他不会抛出异常的线程将成功运行或被中止。
它与AggregatedException类有什么关系吗?
发布于 2012-09-04 07:23:14
假设当异常发生时,其他线程已经在信号量中,它们将成功运行直到完成。如果您希望它们提前终止,请使用带有cancellation token的SemaphoreSlim对象。
发布于 2012-09-04 07:25:24
我不明白你说的是什么意思
在信号量中引发异常
但很可能
在释放信号量之前抛出异常
在这种情况下,10个线程组中的其他线程将毫无问题地运行到完成。如果其他线程随后进入,它们可能会因为缺少许可而死锁。
在任何情况下,都应该在finally
块中释放信号量、锁等,以防止上述情况发生,根据以下方案:
acquire
try
{
risky code
}
finally
{
release
}
https://stackoverflow.com/questions/12257331
复制相似问题