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));
}