gpt4 book ai didi

clojure - clojure中的惯用文件锁定?

转载 作者:行者123 更新时间:2023-12-04 05:13:29 25 4
gpt4 key购买 nike

我有一组来自队列的 future 处理作业,涉及写入文件。确保将来一次只有一个人访问特定文件的惯用方法是什么?

最佳答案

如何使用代理而不是锁来确保这一点?

我认为使用代理来保护共享的可变状态,无论它是在内存中还是在磁盘上,在 clojure 中都比使用锁更惯用。

如果您一次创建一个代理并将访问尝试发送给代理,则可以确保仅在线程上一次访问给定文件。

例如像这样:

(use 'clojure.contrib.duck-streams)

(defn file-agent [file-name]
(add-watch (agent nil) :file-writer
(fn [key agent old new]
(append-spit file-name new))))

(defn async-append [file-agent content]
(send file-agent (constantly content)))

然后通过代理附加您的文件:
(async-append "content written to file" (file-agent "temp-file-name"))

如果您需要同步使用文件,则可以通过 await 来实现。像这样:
(defn sync-append [file-agent content]
(await (send file-agent (constantly content))))

关于clojure - clojure中的惯用文件锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6404717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com