【发布时间】:2011-06-13 16:44:53
【问题描述】:
我有一些只能从多个线程以序列化方式调用的非线程安全代码(共享数据的编写器),但我不想阻止任何其他线程安全的工作(多个读取器)当这段代码没有被调用时。
这本质上是一种多读取器/单写入器类型锁定情况,写入器需要排除读取器和其他写入器。
即我有两个功能:
(defn reader-function [] ....) // only reads from shared data
(defn writer-function [] ....) // writes to shared data
以及一些正在运行(可能在循环中)的线程:
(do
(reader-function)
...
(writer-function))
如果任何单个线程正在执行 writer 函数,则所有其他线程都必须阻塞。即在任何时候:
- 一个线程正在执行 作家和所有人 其他人被屏蔽了
- 多线程是 执行阅读器功能,可能有些线程是 阻塞等待执行 完成所有阅读器后的作者
在 Clojure 中实现这种同步的最佳方式是什么?
【问题讨论】:
标签: multithreading concurrency clojure