C# 信号量重入

C# 信号量重入,c#,.net,multithreading,C#,.net,Multithreading,是否有一些类似的信号量或信号量lim的实现允许重入? 实现此功能的最佳方法是安全使用Thread.CurrentThread.ManagedThreadId和ConcurrentDictionary或具有[ThreadStatic]属性的字段?不确定库信号量Lim来自何处,但通常是“递归的”信号量的意义与递归互斥体的意义不同。信号量可以用作互斥,但也可以用于其他目的。将“递归”功能添加到互斥对象中使其功能更加强大。向信号量添加“递归”功能会削弱其功能。为什么需要它?这似乎是个坏主意。为什么不能在

是否有一些类似的
信号量
信号量lim
的实现允许重入?
实现此功能的最佳方法是安全使用
Thread.CurrentThread.ManagedThreadId
ConcurrentDictionary
或具有
[ThreadStatic]
属性的字段?

不确定库信号量Lim来自何处,但通常是“递归的”信号量的意义与递归互斥体的意义不同。信号量可以用作互斥,但也可以用于其他目的。将“递归”功能添加到互斥对象中使其功能更加强大。向信号量添加“递归”功能会削弱其功能。

为什么需要它?这似乎是个坏主意。为什么不能在决定是否需要稍后重新输入信号量之前简单地释放信号量?或者,为什么你不能在分支代码周围包装信号量条目而不是将它放在中间?从多个方法组成一个单独的锁定资源,这些方法是以不同的方式组成的,用于代码重用。它与执行上下文一起流动,因此您可以检查它以查看是否已经在当前(递归)流中获取了SemphoreSlim,如果已经获取了SemphoreSlim,则可以跳过取出它。