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