Le singleton est-il compatible avec le multithreading ?

Le fait que l'instance du singleton soit partageable entre plusieurs thread fait que ses données peuvent être modifiées par plusieurs threads simultanément...

En fait j'imagine que cette question ramène à toute classe qui met à disposition des données directement ou indirectement statiques (indirectement : ici une instance est accessible statiquement).

Habituellement on doit protéger les données qui peuvent être modifiées par plusieurs threads.

Doit-on alors prévoir pour tout singleton une protection similaire afin d'être "MultithreadSafe" ?