So can one not write exclusively, but read in a shared way using a shared_lock providing one uses a shared_mutex ?
As written, none of your threads are reading, so none can use shared_lock. If you break up ht[] into its components, you could do part of its work in a shared way using an upgrade_lock, but it's not likely to be an improvement over simple lock_guards in this case.