Mutex lock and unlock could be implemented for this basic system like this:
Why isn't
void mutex_lock(mutex_t *m) {
if (m->locked) {
enqueue(m->queue, CurrentThread);
thread_switch();
} else
m->locked = 1;
}
void mutex_unlock(mutex_t *m) {
if (queue_empty(m->queue))
m->locked = 0;
else
enqueue(runqueue, dequeue(m->queue));
}
Don't we need to do something to make these operations atomic?