Announcement

Collapse
No announcement yet.

Threads und volatile (Literaturanfrage)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Threads und volatile (Literaturanfrage)

    Hi,

    Ich arbeite an einem Multithread-Projekt für eine embedded-Platform, das jemand anders begonnen hat, und da werden des häufigeren Variablen aus verschiedenen Threads gegenseitig gesetzt um eine asynchrone Kommunikation zu ermöglichen.

    Zum Beispiel: Das Programm erhält einen Auftrag von einem User-Interface (Thread A) und gibt ihn über eine TCP-Verbindung an einen anderen Rechner weiter. Die Antwort dieses Rechners wird von Thread B entgegengenommen, der daraufhin weitere Operationen ausführt, teilweise weitere Aufgaben an den anderen Rechner gibt usw. und schließlich ein "ich bin fertig"-Flag in dem Objekt setzt, das die Befehle des User Interfaces entgegennimmt (eigentlich ja unter Kontrolle des Thread A). Währenddessen fragt das User-Interface bei Thread A ständig "Wie weit bist Du?", um beim enstprechenden Status dann das Ergebnis anzufordern.

    Was mich nun wundert (da ich mich mit Threads unter C++ nun auch eher nur auf theoretischer Basis auskenne) ist dass im gesamten Projekt nicht eine einzige Variable volatile gekennzeichnet ist, und das ganze trotzdem funktioniert. Liegt das daran, dass die Abfrage aus anderen Objekten heraus und nur über Funktionsaufrufe kommen (also eben nicht die als Beispiel immer herangezogene while(status==WAIT); Schleife, in der auf die Variable direkt zugegriffen wird), oder ist dies nur möglich, weil Compileroptimierungen für die embedded-Platform ausgeschaltet wurden und ich kome in Teufels Küche, wenn das mal optimiert übersetzt werden soll?

    Sollte ich JEDE geteilte Variable als volatile angeben, die ich auch durch Mutexe schützen muss? Wann genau ist es denn überhaupt notwendig, Variablen als volatile zu deklarieren? Und kann mir jemand vielleicht eine Quelle nennen, wo dieses Thema mal ein bisschen verständlich erklärt wird (selbst die Seiten, die ich ergoogelt habe, scheinen das Problem nur in Endlosschleifen zu sehen, auch wenn einige davon zugeben, dass es nicht nur bei Prozessen, sondern auch bei Threads zu Problemen kommen kann)?

    Danke schon mal
    Martin Dietz
Working...
X