Does this implement mutexes correctly? Why or why not?
kmutex_lock(mutex_t *mut) { if (mut->locked) { enqueue(mut->wait_queue, CurrentThread); thread_switch(); } mut->locked = 1; } kmutex_unlock(mutex_t *mut) { mut->locked = 0; if (!queue_empty(mut->wait_queue)) enqueue(RunQueue, dequeue(mut->wait_queue)); }