【发布时间】:2017-12-14 15:05:05
【问题描述】:
我正在尝试向服务器发送请求。每个请求都由一个整数引用。服务器只会响应按升序排列的请求——也就是说,如果我发送请求 7 然后请求 6,它将忽略请求 6。我在一个多线程环境中工作,其中多个线程可以同时发送请求。在 Java 中,我以这种方式解决了这个问题:
synchronized(this){
r = requestId.incrementAndGet();//requestId is an AtomicInteger
socket.sendRequest(r, other_parameters);
}
在 Clojure 中,我考虑过将 request-id 定义为 Atom 并执行以下操作:
(send-request socket (swap! request-id inc) other-parameters)
这是否可行,或者线程 1 是否可以增加 atom,但是当 send-request 函数发送请求时,线程 2 会再次增加 atom 并以某种方式首先联系服务器?避免这种情况的最佳方法是什么?
谢谢,
【问题讨论】: