2014-05-12 139 views
0

還有一些類似的實現SemaphoreSemaphoreSlim允許再入? 實施此功能的最佳方式是什麼,它是安全使用Thread.CurrentThread.ManagedThreadIdConcurrentDictionary或可能是字段[ThreadStatic]屬性?再入信號量

+1

爲什麼你需要這個?這似乎是一個壞主意。爲什麼不能簡單地釋放信號量,然後再決定是否需要稍後重新輸入信號量?另外,爲什麼你不能將信號條目包裝在分支代碼中而不是將它放在中間? –

+0

從多種方式組合一個鎖定資源,以不同的方式組成,以實現代碼重用。 –

回答

1

不確定SemaphoreSlim是來自哪個庫,但是一般來說,「遞歸」信號量與遞歸互斥量有意義的方式無關。一個信號量可以是用作作爲互斥量,但它也可以用於其他目的。將「遞歸」功能添加到互斥體使其更加強大。將「遞歸」功能添加到信號量會降低其功能。