5
새 스레드를 돌리는 서버를 작성했습니다. 이러한 쓰레드 중 일부는 표준 출력에 쓰여야하지만, 그렇게하면 터미널에 아무것도 나타나지 않습니다.SBCL 여러 스레드가 표준 출력에 쓰기
sbcl에 메인 스레드로 메시지를 다시 보낼 수있는 메시징 API가 있습니까?
감사합니다.
새 스레드를 돌리는 서버를 작성했습니다. 이러한 쓰레드 중 일부는 표준 출력에 쓰여야하지만, 그렇게하면 터미널에 아무것도 나타나지 않습니다.SBCL 여러 스레드가 표준 출력에 쓰기
sbcl에 메인 스레드로 메시지를 다시 보낼 수있는 메시징 API가 있습니까?
감사합니다.
어쨌든 현재 *standard-output*
을 새 스레드로 전달해야합니다. 그런 다음 해당 스레드 함수에서 *standard-output*
을 해당 값에 바인딩 할 수 있습니다.
현재 Common Lisp 구현은 스레드 로컬 동적 바인딩을 만들고 SBCL is one of them입니다. 내가 스레드 함수의 인수 *standard-output*
라는 이름의 수도 및 동적이 기능 항목에서 수행 된 바인딩 때문에 그때는 let
필요하지 않을
(sb-thread:make-thread ;; thread function
#'(lambda (standard-output)
;; thread-local dynamic binding of special variable
(let ((*standard-output* standard-output))
...))
;; thread function argument, provided by the current thread
:arguments (list *standard-output*))
참고. 하지만 특수 변수 명명 규칙을 둘러싼 귀 덮개에도 불구하고 동적 바인딩이 명확하고 분명해야한다고 생각합니다.