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