F# F的共享独占锁实现#
我目前正在从事一个F#项目,其中包含许多并行计算。由于绑定到修剪过的.Net 4 Silverlight Framework(由于所需的Silverlight兼容性),我无法使用可用的.Net Implementations,只能通过使用lock关键字使用Monitor对象和简单锁定 您知道F#的共享独占锁实现是如何设计的吗F# F的共享独占锁实现#,f#,multithreading,parallel-processing,F#,Multithreading,Parallel Processing,我目前正在从事一个F#项目,其中包含许多并行计算。由于绑定到修剪过的.Net 4 Silverlight Framework(由于所需的Silverlight兼容性),我无法使用可用的.Net Implementations,只能通过使用lock关键字使用Monitor对象和简单锁定 您知道F#的共享独占锁实现是如何设计的吗 我以前做过一些函数式编程,但还没有专注于并行编程。我不太确定您到底需要什么-如果您需要标准互斥,那么在Silverlight版本的F#runtime中就可以使用lock函数
我以前做过一些函数式编程,但还没有专注于并行编程。我不太确定您到底需要什么-如果您需要标准互斥,那么在Silverlight版本的F#runtime中就可以使用
lock
函数
如果您需要更复杂的东西(例如多个读卡器、单个编写器),那么您可以重写代码以使用F#agent并更优雅地解决问题。如果您可以添加更多关于代码更高层次结构的详细信息,那么有人可以发布一个如何解决特定问题的示例
无论如何,下面的答案显示了如何为多个读卡器/单个写卡器编写可重用代理:
正如在评论中提到的,您可能应该尽量避免显式地编写锁和低级同步原语,因为这是无数错误的来源。F#代理为您提供了更高级别的抽象,更易于使用。专家F#2.0第13章“反应式、异步和并行编程”中有一章介绍了这一点
参见示例13.13显示了一个很好的请求门,类似的东西可能会有用。函数式编程,这不意味着没有副作用,因此不需要锁吗?@vstrien函数式编程有几个方面,没有副作用是F#几乎完全忽略的一个方面。@Ramon-但避免低级锁代码是F#主要遵循的一个方面:-)。我同意,代理可以提供一种很好的方式包装这些类型的构造。