2011-05-30 104 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显示了一个很好的请求门,可能有类似的用法。