gstreamer/docs/random/wtay/rwlocks

34 lines
531 B
Plaintext
Raw Normal View History

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