Vielleicht verstehe ich Deine Frage nicht richtig, aber
Die Klasse die Erzeugt wir muss nicht threadsicher sein, sondern nur die Create Methode Reentrant.
Also "nur" erzeugen und initialisieren und nix weiter im Create machen.
Dann nutze ich
TInterlocked.CompareExchange<T>
um die neue Instance der eigentlichen zuzuweisen.
So mache ich es jedenfalls in allen Threads des FDK. Hatte hiermit noch nie ein Problem.
Grüsse und schönes Ostern
Mavarik