Subj : Re: Improving read-write lock To : comp.programming.threads From : Alexander Terekhov Date : Wed Feb 16 2005 04:18 pm Rob wrote: [...] > Maybe something like this already exists and has been implemented. Here's sorta charade for you. void read_write(rw_mutex & m, which_t w) { sharable_lock read_lock(m); // May need access to many releated which_t's if (compute_expensive_result(w)) { // Upgrade (blocks upcoming readers while pending) scoped_lock write_lock(upgrade(read_lock)); if (read_lock.atomic_upgrade()) { modify_state(w); if (write_lock.upgrade_pending()) register_change(w); } else if (!computation_invalidated(w) || // check registry compute_expensive_result(w)) { modify_state(w); write_lock.upgrade_pending() ? register_change(w) : clear_registry(); } else if (!write_lock.upgrade_pending()) { clear_registry(); } } } Now, what do you think? ;-) regards, alexander. .