gpt4 book ai didi

multithreading - Clojure中的代理和线程同步

转载 作者:行者123 更新时间:2023-12-03 13:18:52 25 4
gpt4 key购买 nike

我必须使用代理重写该代码,以某种方式x的结果为0(这意味着每个线程一个接一个地执行)。但是我遇到了问题,因为我对代理的使用没有足够的了解。
原始代码是:

(def x 0)
(let [t1 (Thread. #(dotimes [_ 10000] (def x (inc x))))
t2 (Thread. #(dotimes [_ 10000] (def x (dec x))))]
(.start t1)
(.start t2)
(.join t1)
(.join t2)
(println x))

当我想使用带有await(agent_name)的代理程序来使每个线程分别运行时,它不起作用,结果总是不同于零。
请对此有何建议?

最佳答案

我尝试了一下,并按预期方式打印0:

(ns agent-demo.core
(:gen-class))

(def counter
(agent 0))

(defn -main [& args]
(let [t1 (Thread. #(dotimes [_ 10000]
(send counter inc)))
t2 (Thread. #(dotimes [_ 10000]
(send counter dec)))]
(.start t1)
(.start t2)
(.join t1)
(.join t2)
(await counter)
(println @counter)
(shutdown-agents)))

关于multithreading - Clojure中的代理和线程同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55565031/

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