previous | start | next

Synchronization

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?



previous | start | next