f# - F# 的共享独占锁实现

标签 f# multithreading parallel-processing

我目前正在开发一个包含许多并行计算的 F# 项目。由于绑定(bind)到经过修剪的 .Net 4 Silverlight 框架(因为需要 Silverlight 兼容性),我无法使用可用的 .Net 实现,只能使用 Monitor 对象和通过使用 lock 关键字进行简单锁定。

您知道如何最好地设计 F# 的共享独占锁实现吗?

我之前做过一些函数式编程,但还没有集中精力做并行的事情。

最佳答案

我不太确定您到底需要什么 - 如果您需要标准互斥,那么 F# 运行时的 Silverlight 版本中提供了 lock 函数。

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

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

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

关于f# - F# 的共享独占锁实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6178947/

相关文章:

f# - 重用 F# 事件模式结果

c# - 从其他线程调用主线程中的方法

C++ NUMA 优化

linux - 如何观察 MPI 程序所有进程的运行时间

c# - Interlocked.Increment() 没有按照我在任务并行库中期望的方式工作

f# - 使用 'inline' 和报价评估时 (+) 和 (-) 之间的行为不一致

.net - F# 是否具有行多态性(或类似的东西?)

f# - 句点 (.) 在 F# 方法中的作用

c - 使用 pthread_mutex_lock 锁定资源意味着什么?

c++ - 当线程 2 写入同一文件时,线程 1 从文件中读取