我是多线程的新手,我遇到了两个关于使用thread.yield和sleep进行线程调度的问题,其中我无法从我的书中或使用Google搜索找到明确的回答。我将保存所有伪代码或真实代码,因为我认为如果我的假设不正确,我已经理解了可能存在的饥饿问题。
我将在我的问题中引用3个伪线程:
我知道yield应该给其他线程运行的机会但是有可能例如在屈服线程之后其他两个线程中的一个尝试运行并且之后它返回到调用yield的原始线程,跳过最后一个线程并没有给它机会运行吗?
如果这些问题没有意义,我的代码中可能存在的问题是,在进入休眠状态的线程之前,它已经解锁了一个互斥体,其中一个其他线程之前尝试过锁定,失败并等待它打开。所以在线程进入休眠状态后,是否保证试图锁定互斥锁的线程会在睡眠线程之前将其锁定?
答案 0 :(得分:1)
Thread.yield()
是线程调度程序的提示,这意味着“嘿,现在我感觉好,如果你让我开始让其他线程运行”。没有保证,这只是一个提示。关于“队列”中线程排序的假设也是不正确的,因为线程调度也是由OS完成的,如果没有额外的线程交互机制,很难预测特定的命令顺序。
Thread.sleep()
让当前线程在指定的时间内进入休眠状态,因此第二个问题的答案是 - 不,他们会做不同的事情。