***********************************************

typedef struct {
  int pre_count;
  int post_count;
  Mutex *lock;
} RWLock;


reader:

  retry:
    post = atomic_get (lock->post_count);

    ... do read ...

    if (atomic_get (lock->pre_count) != post) {
      /* wait for writer to finish then retry */
      lock (lock->mutex);
      unlock (lock->mutex);
      goto retry;
    }


writer:

   lock (lock->mutex);
   atomic_inc (lock->pre_count);

   ... update ...

   atomic_inc (lock->post_count);
   unlock (lock->mutex);
