【发布时间】:2014-07-02 17:03:00
【问题描述】:
我是多线程的新手,我遇到了两个关于线程调度的问题 thread.yield 和 sleep 我无法从我的书或谷歌搜索中找到明确的答案。我将保存所有伪代码或真实代码,因为如果我的假设不正确,我认为我已经理解了可能的饥饿问题。
我将在我的问题中引用 3 个伪线程:
- 我的第一个问题是,如果我在 3 个线程中的一个线程中调用线程 yield 或 sleep,是否可以保证 CPU 在返回调用 yield 的线程之前尝试调度和处理其他 2 个线程?所以基本上是一个明确的队列中的线程,这使得屈服线程进入队列的最后一个?
我知道 yield 应该让其他线程有机会运行,但是是否有可能,例如,在产生线程之后,其他 2 个线程之一尝试运行,然后它返回到调用 yield 的原始线程,跳过最后一个线程,根本不给它运行的机会?
- 我的第二个问题与第一个有关。那么 yield 和 sleep 是否都具有相同的属性,即它们在被调用时都将成为队列中的最后一个,就像我在第一个问题中假设的那样,或者它们之间除了睡眠时间之外还有其他区别吗?
如果这些问题没有意义,我的代码中可能存在的问题是,在进入睡眠状态的线程之前,它已经解锁了一个互斥锁,其他线程之一之前尝试过锁定,失败并等待它打开.那么在线程进入睡眠状态后,是否保证试图锁定互斥体的线程会在睡眠线程之前锁定它?
【问题讨论】:
标签: multithreading sleep yield