Comment detail
ワーカスレッドを安全に終了させるまで待機 (Nested Flatten)「標準的」というのは私も知りませんです。Allegro CLの場合はmultiprocessingパッケージというのがついてくるので普段はそれを使っています (名前はprocessですが実態はネイティブスレッド)。
スレッドプールについても標準的なものがあるのかどうかは知りません。昔、Allegroのmultiprocessingの上に書いたスレッドプールパッケージがあるんですが、ここにそのまま出せない事情があるので、もし時間が取れれば簡単なバージョンを書いてポストします。 (ほんとはコードを書いてポストしようと思ってたんだけど、時間がきつきつなので…)
コメント頂きありがとうございます。とても参考になりました。自分もAllegro CL試してみたいと思います。 スレッドプールのコードについては、興味津々です。いつかお手隙の際にでもポストして頂けたらと思います。





mc
#4971()
[
Common Lisp
]
Rating0/0=0.00
see: Portable-Threads
(defpackage #:doukaku-116 (:use #:cl #:portable-threads)) (in-package #:doukaku-116) (defun subjob (name) (let ((sleep (+ 5 (random 10)))) (format t "~&~A(~2D sec.) Start.~%" name sleep) (sleep sleep) (format t "~&~A(~2D sec.) Stop.~%" name sleep))) (defun main (&rest jobs) (do ((ths (mapcar (lambda (exe) (spawn-thread (gensym) exe)) jobs))) ((notany #'thread-alive-p ths) (format t "~&All threads finished.~%"))))Rating0/0=0.00-0+
1 reply [ reply ]