我有一个集合,存储在原子中,如下所示:
我有一个存储在原子中的集合,就像这样:
(def numbers (atom #{1 2 3 4 5}))
使用 swap!
方法,可以定期原子地添加和删除此集合中的数字。在单独的线程中,我希望有一个函数从集合中提取并删除偶数,并将它们返回。
我可以采用以下一种方式:
(let [{even true odd false} (group-by even? @numbers)]
(reset! numbers odd)
even)
然而,这不是一个原子操作。numbers
可能会在 group-by
和 reset!
之间发生变化。有没有一种方法可以原子地执行此操作?