Also, nochmal zusammengefasst:
- Man würde sich wünschen, dass const Members automatisch threadsafe sind, was der C++11-Standard auch vorschreibt, was aber technisch nicht garantiert ist, eben weil es mutable gibt. Selbst ohne mutable ist const nicht sicher, sobald Zeiger, Referenzen oder Casts im Spiel sind.
- Ob etwas threadsafe ist, hängt technisch gesehen überhaupt nicht mit den Deklarationen const und mutable zusammen, sondern damit ob der betreffende Code auf irgendwelche Daten schreibend zugreift und ob solche Zugriffe korrekt synchronisiert sind. Egal ob etwas mit der Deklaration const markiert ist oder nicht, kann es diese Eigenschaft haben, muss es aber nicht.
- Gäbe es eine Deklaration ähnlich zu const, die nicht nur ein leeres Versprechen wäre, sondern erzwingen würde, dass der betreffende Code seiteneffektfrei ist, dann wäre damit markierter Code tatsächlich automatisch threadsafe. Genau deswegen sind pur funktionale Sprachen für nebenläufige Prorammierung interessant, denn in diesen Sprachen ist aller Code der überhaupt kompiliert immer automatisch threadsafe. Ein SML oder Haskellprogrammierer würde sagen, dass das Typsystem von C und C++ einfach ein schlechter Witz ist, da Casts erlaubt sind und damit überhaupt keine beweisbaren Garantien über irgendwelche Eigenschaften des Codes mehr aus den Typsignaturen abgeleitet werden können.
When C++ is your hammer, every problem looks like your thumb.