2014-03-19 204 views
0

我有一個多線程應用程序。我有三個共享資源。不同的線程會同時調用這些資源。我需要爲此提供一個互斥體。一個互斥體是否足夠了,還是應該爲每個資源創建一個互斥體?使用多個互斥鎖時會加速嗎?Ruby和互斥體

+0

沒有一個線程一次只需要多個資源? –

+0

不,一次線程需要一個資源 –

回答

1

如果資源獨立於彼此,沒有理由使用單個互斥鎖來保護它們。您將會捱餓其他可以安全使用的資源的訪問線程。

如果可能,請爲每個資源使用一個互斥鎖。

性能 - 訪問共享資源的線程更有可能在獨立保護資源的情況下執行得更好,而不是擁有單個共享Mutex - 但這取決於比這更多的因素。

+0

如果線程一次需要獲取多個資源,我懷疑OP是否擔心死鎖? –

+0

在這種情況下[Dining Philosophers](https://en.wikipedia.org/wiki/Dining_philosophers_problem)問題適用,他需要確保線程始終以相同順序獲取和釋放資源上的鎖。 – mcfinnigan