F#的共享独占锁实现

时间:2011-05-30 08:38:25

标签: f# multithreading parallel-processing

我目前正在开发一个包含许多并行计算的F#项目。由于绑定到修剪过的.Net 4 Silverlight Framework(由于所需的Silverlight兼容性),我不能使用可用的.Net implmenetations,并且只能使用Monitor对象和使用锁定关键字进行简单锁定。

您是否知道F#的共享独占锁实现如何最佳?

之前我做了一些函数式编程,但还没有集中精力做那些并行的东西(还)。

2 个答案:

答案 0 :(得分:4)

我不太确定你到底需要什么 - 如果你需要标准互斥,那么lock函数可以在Silverlight版本的F#运行时中使用。

如果您需要更复杂的东西(例如多个读者,单个编写者),那么您可以重写代码以使用F#代理并更优雅地解决问题。如果您可以添加有关代码的更高级结构的更多详细信息,那么有人可以发布示例如何解决您的特定问题。

无论如何,以下SO答案显示了如何为多个读者/单个作者编写可重用代理:

正如评论中所提到的,您应该尽量避免明确地编写锁和低级同步原语,因为这是无数个错误的来源。 F#代理为您提供了更易于使用的更高级抽象。

答案 1 :(得分:2)

在专家F#2.0,第13章反应,异步和并行编程中,这是一个很好的章节。

参见例13.13显示了一个很好的请求门,类似的东西可能有用。