我可以唤醒特定的Haskell线程吗?

时间:2012-11-18 17:03:29

标签: multithreading haskell

有没有办法唤醒Haskell中的特定线程?有一个function that suspends the current thread。但清醒的对手似乎并不存在。

1 个答案:

答案 0 :(得分:7)

yield不会挂起当前线程 - 它会将其移动到运行队列的后面。它仍然在运行队列中,它只是确保其他可运行的线程(可能不是所有可运行的线程,如果定义了多个执行上下文,这使得这是一个非常弱的保证)有机会在它继续之前运行。在大多数情况下,您应该忽略yield。唯一的例外是当你完全理解它的作用,以及为什么重要。

要实际暂停和恢复线程,MVar是可行的方法。当线程等待空MVar时,它将从可运行队列中删除。当一个值被放入MVar时,一个等待它的线程(我相信GHC它始终是那个等待MVar最长的线程但不保证的线程)被放回到可运行的队列。