The scheduler loop no longer needs to hold the next proc's lock

上级 66ad4934
......@@ -94,7 +94,6 @@ void cv_sleepto(struct condvar *cv, struct spinlock *lk, u64 timeout)
release(&cv->lock);
sched();
release(&myproc()->lock);
// Reacquire original lock.
acquire(lk);
......
......@@ -37,10 +37,8 @@ idleloop(void)
struct proc *p = schednext();
if (p) {
acquire(&p->lock);
if (get_proc_state(p) != RUNNABLE) {
panic("Huh?");
release(&p->lock);
} else {
if (idle[mycpu()->id])
idle[mycpu()->id] = 0;
......
......@@ -64,7 +64,6 @@ yield(void)
acquire(&myproc()->lock); //DOC: yieldlock
set_proc_state(myproc(), RUNNABLE);
sched();
release(&myproc()->lock);
}
......@@ -73,9 +72,6 @@ yield(void)
void
forkret(void)
{
// Still holding proc->lock from scheduler.
release(&myproc()->lock);
// Just for the first process. can't do it earlier
// b/c file system code needs a process context
// in which to call cv_sleep().
......@@ -527,7 +523,6 @@ wait(void)
void
threadhelper(void (*fn)(void *), void *arg)
{
release(&myproc()->lock); // initially held by scheduler
mtstart(fn, myproc());
fn(arg);
exit();
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论