有没有办法唤醒 Haskell 中的特定线程?有一个函数可以暂停当前线程。但醒着的对手似乎并不存在。
问问题
187 次
1 回答
7
yield
不会挂起当前线程 - 它会将其移动到运行队列的后面。它仍在运行队列中,它只是确保其他可运行线程(可能不是所有可运行线程,如果定义了多个执行上下文,这使得这是一个非常弱的保证)有机会在它继续之前运行。在大多数情况下,您应该忽略yield
. 例外情况是,当您确切了解它的作用以及它的重要性时。
要实际挂起和恢复线程,MVar
s 是要走的路。当一个线程等待空MVar
时,它会从可运行队列中删除。当一个值被放入 a 时MVar
,一个等待它的线程(我相信在 GHC 中它总是等待MVar
最长时间的线程,但不能保证)被放回可运行队列。
于 2012-11-18T18:33:37.650 回答