See #482
I forgot about this one, which indeed is more annoying to solve. We could try to make it thread-safe too but then, if we go with a synchronization approach, the cost may end up higher (and not only for mono-core users which are going to pay more anyway, but even for multi-core ones!) than the cost of "simplifying many times" - in which case we'd better keep it as is and acknowledge it is a "best effort" cache. Also, I am not sure how much this cache it useful, it would be good to measure it (if it is not, we can simply remove it and the problem will be solved).
If we end up having a thread-safe version, we could also offer a Solver.Make.Cache_thread_safe using the same datastructure as a cache back-end.