gpt4 book ai didi

multithreading - 一旦Chan中没有更多数据要处理时,如何停止线程?

转载 作者:行者123 更新时间:2023-12-03 13:19:10 26 4
gpt4 key购买 nike

我想使用Control.Concurrent.Chan。有一个很大的列表,提供商将其分为几个较小的列表。它将大块写入 channel 。然后,消费者从 channel 读取这些块并进行处理。

一旦没有更多数据可提供和使用,如何关闭分支并返回结果?

使用TChan可以检查 channel 是否为空。但是我想学习,如何使用简单的Chan
我发现的大多数示例代码都只是使用forever $ getLine ...,并从main开始,如果没有完成fork,那么这不是问题,因为一旦main结束,fork也会结束。我还没有找到一个很好的消费者提供者示例,从中我可以理解如何与Chans合作

最佳答案

您可以像这样在基础Chan上设计 channel :

newtype MChan a = MChan (Chan (Maybe a))

newMChan :: IO (MChan a)
newMChan = MChan <$> newChan

closeMChan :: MChan a -> IO ()
closeMChan (MChan c) = writeChan c Nothing

writeMChan :: MChan a -> a -> IO ()
writeMChan (MChan c) = writeChan c . Just

readMChan :: MChan a -> IO (Maybe a)
readMChan (MChan c) = readChan c

因此,您可以关闭 channel ,并且消费者将一无所获,并且将发出停止线程的信号。

关于multithreading - 一旦Chan中没有更多数据要处理时,如何停止线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43800560/

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