2011-11-10 4 views
2

상담원에게 상담원에게 전화를 걸 때 어떤 일이 일어나는지 주위를 감추고 있습니다.상담원을 호출하는 상담원

(defn testA [] 
    "This returns 'top', whose value is 'bottom', whose value is 2." 
    (send top (fn [top-value] 
      (send bottom inc))) 
    (await top) 
    top) 

(defn testB [] 
    "This never terminates." 
    (send top (fn [top-value] 
      (send bottom inc) 
      (await bottom) ;;<- this is new 
      bottom)) 
    (await top) 
    top) 

내부 AWAIT에 무슨 일이 일어나고 무엇 :

(def top (agent 0)) 
(def bottom (agent 1)) 

나는 최소한의 쌍을 가지고? 한 상담원이 다른 상담원을 호출 할 때 어떤 요소가 작용합니까?

답변

2

짧은 대답은

감사합니다, 당신은 에이전트 작업에 await을 사용할 수 없습니다. (agent-error top)

더 이상 답변을 드릴 수없는 이유를 설명하려면 다음을 수행해야합니다. (a) 기다려야하는 몇 가지 clojure 전문가 :) 내 걸릴 시간은 얼마입니까? 죽은 자물쇠 또는 다른 재앙을 소개 할 수 있습니다.

또한 top 또는 bottom을 사용하면 에이전트 자체가 반환되며 값은 반환되지 않습니다. 가치를 얻으려면 짧게는 (deref top) 또는 @top이 필요합니다.

관련 문제