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?