Kleine Frage zur Threadsicherheit



  • Hallo!

    Sry ich wußte nicht wohin mit diser Frage, falls ich hier falsch bin bitte verschieben!

    Ich würde gerne wissen ob statische Variablen in Funktionen/Methoden und statische Klassenmember Threadsicher sind ??

    Sprich jeder Thread hat seine eigenen Instanz dieser statischen Variable/Funktion ?

    Beispiel: Eine statische Variable in einer Klasse gibt es im ganzen Programm nur einmal (jeder zugriff erfolgt auf die ein und selbe Variable, wie gewohnt). Wenn ich jetzt aber 2 Threads erstelle, mit einer Funktion welche eine statische Variable besitzt, greifen dann beide Trheads auf die selbe Variable zu, oder hat jeder Thread seine eigenen Instanz dieser statischen Variable ???

    Danke !! 🙂



  • statische oder globale variablen (auch solche die als singleton verkleidet sind) musst du grundsätz mit mutex/futex/was auch immer sichern.
    das statisch bezieht sich immer auf das ganze programm. es gibt auch thread-spezifische statische/globale aber nicht im standard, sondern als ergänzung in deiner lib, die lassen sich aber nicht über normale c++-mittel erstellen.



  • Danke, das wollte ich wissen!

    Nur aus Neugier, mit welchen Mitteln lassen sich solche Threadspezifische globale/statische variablen erstellen ?



  • das hängt von der lib ab, die du zum threading benutzt. mehr kann ich dir so nicht zu sagen. falls windows, hoffe ich, dass andere antworten.



  • Oh sry, ja Windows.

    Muss es eh nicht wissen, klappt jetzt auch ohne, wollte es nur wissen weil ich lieber gleich von anfang an auf die Threadsicherheit achte.



  • Gast235258 schrieb:

    klappt jetzt auch ohne, wollte es nur wissen weil ich lieber gleich von anfang an auf die Threadsicherheit achte

    lol? widersprichst du dir da nicht ein wenig?

    btw: du kannst nur auf den mutex/... verzichten, wenn das objekt NIE verändert wird und du ausschließlich lesende Zugriffe hast...

    so bald es passieren kann, dass ein thread gerade irgendetwas ändert und ein anderer zur gleichen zeit lesen oder so gar auch schreiben soll (kann / darf / ...) und du kein mutex oder so hast, kannste die daten auch gleich einfach erraten lassen...

    bb



  • unskilled schrieb:

    Gast235258 schrieb:

    klappt jetzt auch ohne, wollte es nur wissen weil ich lieber gleich von anfang an auf die Threadsicherheit achte

    lol? widersprichst du dir da nicht ein wenig?

    btw: du kannst nur auf den mutex/... verzichten, wenn das objekt NIE verändert wird und du ausschließlich lesende Zugriffe hast...

    so bald es passieren kann, dass ein thread gerade irgendetwas ändert und ein anderer zur gleichen zeit lesen oder so gar auch schreiben soll (kann / darf / ...) und du kein mutex oder so hast, kannste die daten auch gleich einfach erraten lassen...

    bb

    Tschuldige, habe mich falsch ausgedrückt, ich meinte mit "es klappt jetzt auch ohne", dass es ohne statische Variablen funktioniert. Zur Zeit benutze ich noch keine Threads, aber ich will auf Nummer sicher gehen, falls ich den Code bzw. das Programm doch in einen Thread verpacke.


Anmelden zum Antworten