>>Then, since the runtimes themselves are not threadsafe, how can this work in a threadsafe manner?
Either the calls have to be queued (which is not my idea of multithreading) or you have problems.
That's not my understanding of how it works. If Mtdll uses STA then one block of memory can be shared between multiple simultaneous apartments that don't interfere with each other. It's not free-threaded, but it is thread-safe.
"... They ne'er cared for us
yet: suffer us to famish, and their store-houses
crammed with grain; make edicts for usury, to
support usurers; repeal daily any wholesome act
established against the rich, and provide more
piercing statutes daily, to chain up and restrain
the poor. If the wars eat us not up, they will; and
there's all the love they bear us."
-- Shakespeare: Coriolanus, Act 1, scene 1