From 5aeb28aabdc6b861f153c88a3b8b84384dfd4e90 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 19 Mar 2009 11:46:11 +0100 Subject: [PATCH] docs: interesting idea for fast rw locks -- --- docs/random/wtay/rwlocks | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 docs/random/wtay/rwlocks diff --git a/docs/random/wtay/rwlocks b/docs/random/wtay/rwlocks new file mode 100644 index 0000000000..07a18212de --- /dev/null +++ b/docs/random/wtay/rwlocks @@ -0,0 +1,33 @@ +*********************************************** + +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);