gstreamer/docs/random/wtay/rwlocks
2009-03-19 11:46:11 +01:00

33 lines
531 B
Text

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