Les variables statiques sont-elles initialisées dans un thread particulier?

Je faisais des recherches inspirées par cette question et j’ai remarqué que plusieurs des solutions proposées à des problèmes similaires créaient un object mutex lors de l’initialisation d’une variable statique. Un tel mutex ne fonctionnera que si le thread qui l’a créé rest actif pendant toute la durée de vie de l’application.

Maintenant, il semble raisonnable de supposer que les variables statiques sont initialisées par le thread principal du processus, et il semble également raisonnable de supposer que le thread principal du processus ne se termine que lorsque la fonction principale est fermée (qui est probablement sous le contrôle du programmeur).

Mais l’un ou l’autre est-il réellement garanti par la norme de langage C #?

PS: je parle des threads Windows, pas des threads .NET.

En C #, les variables statiques sont initialisées par le chargeur de classes lors du premier chargement de la classe. Cela présente l’artefact intéressant d’être sur n’importe quel fil référencé en premier dans la classe.

Nous notons également que le thread principal n’est pas garanti pour être un thread géré, donc toute bibliothèque après le thread principal n’est pas tout à fait sûre de pouvoir l’identifier. J’ai écrit un programme une fois qui n’avait pas de thread principal après l’initialisation native juste pour prouver que cela pouvait être fait.