홈>
에이전트를 사용 하여이 코드를 다시 작성해야합니다. 어쨌든 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
관련 질문
- java - 스레드 중 하나가 소수를 찾으면 스레드를 중지하는 방법
- multithreading - java에서 동기화 된 키워드 및 경쟁 조건으로 인해 예기치 않은 오류가 발생했습니다
- java - 스레드가 ReentrantLock이 해제되기를 기다리는 방법은 무엇입니까?
- multithreading - Java 잠금 사용시 경쟁 조건 가능성
- multithreading - JVM/x86은 코어에서 비 휘발성 값의 전파를 보장합니까?
- multithreading - Anderson의 운영 체제 원칙 및 실습에서 스핀 록을 사용하여 잠금 구현
- multithreading - 다른 스레드에서 메소드 실행
- c - 동시 스레드 및 데이터 레이스
- multithreading - 미리 정의 된 스레드 실행 순서
- java - 스레드 내에서 Runnable 객체의 필드에 액세스하는 방법
나는 이것을 시도하고
0
를 인쇄합니다. 예상대로 :