Merge remote-tracking branch 'origin/0.10'
[platform/upstream/gstreamer.git] / docs / random / wtay / rwlocks
1 ***********************************************
2
3 typedef struct {
4   int pre_count;
5   int post_count;
6   Mutex *lock;
7 } RWLock;
8
9
10 reader:
11
12   retry:
13     post = atomic_get (lock->post_count);
14
15     ... do read ...
16
17     if (atomic_get (lock->pre_count) != post) {
18       /* wait for writer to finish then retry */
19       lock (lock->mutex);
20       unlock (lock->mutex);
21       goto retry;
22     }
23
24
25 writer:
26
27    lock (lock->mutex);
28    atomic_inc (lock->pre_count);
29
30    ... update ...
31
32    atomic_inc (lock->post_count);
33    unlock (lock->mutex);