Lock free reads are accomplished by the reader atomically pulling the hash table pointer from the class. The hash table is self contained, with its size stored in the table itself, and hash tables are not freed until the class's destruction. So if the table needs to be reallocated due to a write, active readers will still have valid memory. This does mean that tables leak, but worst case, you end up with half of the memory being waste. It would be possible to garbage collect the excess tables, but you'd need some kind of global synchronization to make sure no readers are active.