4

有没有办法唤醒 Haskell 中的特定线程?有一个函数可以暂停当前线程。但醒着的对手似乎并不存在。

4

1 回答 1

7

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

要实际挂起和恢复线程,MVars 是要走的路。当一个线程等待空MVar时,它会从可运行队列中删除。当一个值被放入 a 时MVar,一个等待它的线程(我相信在 GHC 中它总是等待MVar最长时间的线程,但不能保证)被放回可运行队列。

于 2012-11-18T18:33:37.650 回答