gpt4 book ai didi

multithreading - 你如何杀死一个 core.async/thread?

转载 作者:行者123 更新时间:2023-12-04 06:39:19 24 4
gpt4 key购买 nike

我收到了 core.async/thread 返回的一些线程参与了一些我即将关闭的过程。我不会关闭我的整个程序,只是关闭这些线程。如何终止线程?
.stop Java的方法Thread类已弃用,但我很乐意使用它,除了 core.async/thread返回不是 Thread ,但是一个 ManyToManyChannel :

user=> (clojure.core.async/thread)
#object[clojure.core.async.impl.channels.ManyToManyChannel 0x780e97c0
"clojure.core.async.impl.channels.ManyToManyChannel@780e97c0"]
user=> (type *1)
clojure.core.async.impl.channels.ManyToManyChannel

我没有在 ManyToManyChannel 上找到任何文档.这听起来像是线程类型的一个奇怪名称,所以这里可能有一些我不明白的基本内容。但这是我目前天真、荒谬的问题:你如何杀死 ManyToManyChannel ?
clojure.repl/thread-stopper似乎对 ManyToManyChannel没有影响s。

最佳答案

你让线程自然终止。如果需要外部终止,则必须实现它。

(defn terminatable [input-ch terminate-ch]
(thread
(loop []
(let [[v ch] (alts!! [input-ch terminate-ch])]
(if (identical? ch input-ch)
(if (some? v)
(do (process-input v) (recur))
;; else input-ch has closed -> don't call recur,
;; thread terminates
)
;; else we received sth. from terminate-ch,
;; or terminate-ch has closed -> don't call recur,
;; thread terminates
)))))

然后通过外部终止
(close! terminate-ch)
最后,您可以通过从 thread 返回的 channel 中获取来确定线程何时终止。 .

IE。
(take! (terminatable (chan) (doto (chan) close!)) 
(fn [_] (println "Thread is terminated")))

关于multithreading - 你如何杀死一个 core.async/thread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37598084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com