Most of the work for multi-folds was aimed at making this possible: delaying the inevitable freeze until a put changed the number of khash slots.  Iterators are linked to a timestamp and tolerate finding entries added after the iteration was started.  Entries can now be simple entries or linked lists, which can contain multiple versions of an entry. Puts then do not replace the entry, but add another version to this list (or convert a plain entry to a list).  Iterators will choose from this list of timestamped entries the one from the snapshot they belong to.  When the pending hash is merged (freeze is over!), all entries are merged back to good ol' plain entries.  It's a lot of fun, you should try it.