>

에이전트를 사용 하여이 코드를 다시 작성해야합니다. 어쨌든 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과 다릅니다. 이것에 대한 제안이 있으십니까?


  • 답변 # 1

    나는 이것을 시도하고 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)))
    
    

  • 이전 android - onStartJob에 등록한 후 브로드 캐스트 리시버가 작동하지 않습니다
  • 다음 c# - sshnet을 사용하여 형식이 지정된 JSON을 텍스트 파일에 작성하는 방법은 무엇입니까?