Or a signal handler? Even if there's a single kernel thread, if it can be interrupted while inside one of these functions you can hit the same sort of problem.
Reentrancy was an issue on consumer devices well before multithreading was commonly supported there, after all
this isn't about safety, though; hcreate() and hsearch() don't support having two hash tables in the same process at the same time, not even in an unsafe way. that also makes them non-reentrant, but that isn't the main problem!
Reentrancy was an issue on consumer devices well before multithreading was commonly supported there, after all