Musisz jak najszybciej przekazać bieżący numer *standard-output*
do nowego wątku, a następnie w funkcji tego wątku możesz powiązać *standard-output*
z tą wartością.
Obecne implementacje Common Lisp tworzą powiązania dynamiczne wątku lokalnego i SBCL is one of them.
(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*))
Zauważ, że mógłbym nazwany argument funkcji wątku za *standard-output*
i wtedy nie musiałby się let
, ponieważ dynamiczne wiązanie zostało wykonane przy wejściu funkcji. Ale myślę, że dynamiczne wiązania powinny być wyraźne i oczywiste, niezależnie od nauszników wokół specjalnej konwencji zmiennych nazw.