Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# F的共享独占锁实现#_F#_Multithreading_Parallel Processing - Fatal编程技术网

F# 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函数

我目前正在从事一个F#项目,其中包含许多并行计算。由于绑定到修剪过的.Net 4 Silverlight Framework(由于所需的Silverlight兼容性),我无法使用可用的.Net Implementations,只能通过使用lock关键字使用Monitor对象和简单锁定

您知道F#的共享独占锁实现是如何设计的吗


我以前做过一些函数式编程,但还没有专注于并行编程。

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

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

无论如何,下面的答案显示了如何为多个读卡器/单个写卡器编写可重用代理:


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

专家F#2.0第13章“反应式、异步和并行编程”中有一章介绍了这一点


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

函数式编程,这不意味着没有副作用,因此不需要锁吗?@vstrien函数式编程有几个方面,没有副作用是F#几乎完全忽略的一个方面。@Ramon-但避免低级锁代码是F#主要遵循的一个方面:-)。我同意,代理可以提供一种很好的方式包装这些类型的构造。