Pavel Vasiliev wrote: > May be the following code answers the challenge? :-).
Interesting... [...] > void weak_ref_control_block::release_strong() > { > if(atomic_decrement(&strong_count) == 0) > strong_refs_lost(); > } > bool weak_ref_control_block::acquire_strong_from_weak() > { > scope_lock lock(mutex_destruct); > if(atomic_increment(&strong_count) > 0) > return true; > > atomic_set(&strong_count, atomic_int_type_MIN); > return false; > } Thread A, in release: atomic_decrement(&strong_count) == 0 Thread B, in acquire: atomic_increment(&strong_count) > 0, return true Thread A: strong_refs_lost(); // oops, B hates us at this point Isn't this a problem? Not that I want to break it... I'd like a lock-less implementation, too. :-) _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost