2011-05-30 100 views
2

我目前正在研究一個包含許多並行計算的F#項目。由於綁定到修剪的.Net 4 Silverlight框架(因爲需要Silverlight兼容性),所以我不能使用可用的.Net implmenetations,並且可能只能使用Monitor對象並通過使用lock關鍵字進行簡單鎖定。F#的共享獨佔鎖實現

你知道一個F#共享獨佔鎖定實現的最佳設置嗎?

我做過一些函數式編程,但並沒有專注於做並行的東西(還)。

+1

函數式編程,並不意味着沒有副作用,因此不需要鎖? – vstrien 2011-05-30 11:18:59

+0

@vstrien函數式編程有幾個方面,沒有任何副作用是F#幾乎完全忽略的一個方面。 – 2011-05-30 17:25:34

+1

@Ramon - 但是避免低級基於鎖的代碼是F#主要遵循的一個方面:-)。 – 2011-05-30 19:23:56

回答

4

我不太清楚你需要什麼 - 如果你需要標準的互斥,那麼lock函數在Silverlight版本的F#運行時中可用。

如果您需要更復雜的東西(例如多個閱讀器,單個作者),那麼您可以重寫代碼以使用F#代理並更優雅地解決問題。如果您可以添加更多關於代碼的更高級別結構的詳細信息,那麼有人可以發佈一個示例來說明如何解決您的特定問題。

不管怎樣,下面SO回答瞭如何編寫多的讀者可重複使用的代理/單寫:

正如在評論中提到,你應該儘量避免寫鎖定和低級同步原語顯式,因爲這是一個無限數量的錯誤的來源。 F#代理爲您提供更易於使用的更高級抽象。

+0

我同意,代理商可以提供一個很好的方式來包裝這些類型的構造。 – 7sharp9 2011-05-31 09:14:03

2

Theres在專家F#2.0,第13章反應式,異步和並行編程方面有很好的一章。

請參見示例13.13顯示了一個很好的請求門,可能有類似的用法。