previous | start | next

Prob 4

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


previous | start | next