有没有办法唤醒Haskell中的特定线程?有一个function that suspends the current thread。但清醒的对手似乎并不存在。
答案 0 :(得分:7)
yield
不会挂起当前线程 - 它会将其移动到运行队列的后面。它仍然在运行队列中,它只是确保其他可运行的线程(可能不是所有可运行的线程,如果定义了多个执行上下文,这使得这是一个非常弱的保证)有机会在它继续之前运行。在大多数情况下,您应该忽略yield
。唯一的例外是当你完全理解它的作用,以及为什么重要。
要实际暂停和恢复线程,MVar
是可行的方法。当线程等待空MVar
时,它将从可运行队列中删除。当一个值被放入MVar
时,一个等待它的线程(我相信GHC它始终是那个等待MVar
最长的线程但不保证的线程)被放回到可运行的队列。