2017-12-14 7 views
1

서버에 요청을 보내려고합니다. 각 요청은 정수로 참조됩니다. 서버는 오름차순으로 오는 요청에만 응답합니다. 즉, 요청 7을 보내고 6을 요청하면 요청 6을 무시합니다. 여러 스레드가 동시에 요청을 보낼 수있는 다중 스레드 환경에서 작업하고 있습니다.Clojure - synchronized 블록

(send-request socket (swap! request-id inc) other-parameters) 

가 작동합니까이거나 그것이 가능한 스레드 : Clojure의에서

synchronized(this){ 
    r = requestId.incrementAndGet();//requestId is an AtomicInteger 
    socket.sendRequest(r, other_parameters); 
} 

, 나는 아톰으로 요청 ID를 정의하고 다음을 수행 생각 : 자바에서 나는 이러한 방식으로 문제를 해결 1은 원자를 증가 시키지만 send-request 함수가 요청을 전송할 때까지 스레드 2가 원자를 다시 증가시키고 어떻게 든 서버에 먼저 연결합니까? 그러한 시나리오를 피하는 가장 좋은 방법은 무엇입니까?

synchronized

답변

1

Clojure에서의 동등한 구조는 기본적으로 동일한 방식으로 사용할 수 있습니다 locking입니다, 감사 : some-lock 당신이에 고정하고있는 객체가

(locking some-lock 
    (let [r (.incrementAndGet requestId)] 
    (.sendRequest socket r other_parameters))) 

. this이 없으면 무엇을 원하는지 잘 모르겠습니다.

+0

감사합니다. 나는 심판에 대해 생각했지만 이론적으로 문제를 일으킬 수있는 서버에 여러 번 요청을 보낼 수있는 문서를 읽었습니다. (잠금) 정확히 내가 원하는 것 같습니다. – alex314159