Seems that Boost\'s shared_mutex is non recursive.. Is there anyway around this? (without re implementing the whole stuff)
boost::recursive mutex is exclusive. I think you will need to extend shared_mutex. You can keep current thread ID in a set and check if it exist in the set in function providing lock.