thread sperren
-
Hi.
ich habe gerade ein Problem, und zwar habe ich ein Programm,dass gespeicherte Daten über befehle auslesen kann! Alle 15 sekunden wird in einem neuen thread eine Aktualisierung der Daten durchgeführt, d.h. es wird auf diesen Speicherbereich schreibend zugegriffen.
Das problem ist, dass das programm logischer weise abbricht wenn ich während des aktualisierungs vorgang, lesend auf die Daten zugreifen will.
Und jetzt zu meiner Frage, wie kriege ich es hin, dass während des Schreibvorgangs, ein Lesevorgang gesperrt wird?
-
z.B. mit einem Mutex.
Simon
-
Wenn du Funktionen für den Lese-/ Schreibzugriff auf den Speicherbereich hast, die von allen Threads verwendet werden, würde ich einfach die Lese- bzw. Schreibfunktionen selbst immer ein Mutex sperren lassen.
-
Hi. Danke für die schnellen Antworten, das problem ist ich habe noch nie mit Mutex gearbeitet, habt ihr da vielleicht irgendwelche tutorials, die ich mir durchlesen kann?
-
Also falls du bei POSIX bist, gibt hier immerhin mal eine kleine Referenz:
http://www.qnx.com/developers/docs/6.3.2/neutrino/lib_ref/lib-p.htmlUnd dabei im Speziellen:
http://www.qnx.com/developers/docs/6.3.2/neutrino/lib_ref/p/pthread_mutex_lock.htmlDa könntest du dich schonmal ein bisschen reinlesen.
(Ein richties Tut wäre natürlich schöner, hab ich aber gerade nicht bei der Hand leider).Deine Getter/ Setter konsturierst du dann etwa so:
// Pseudocode int get() { pthread_mutex_lock(....); int a = // Zugriff auf den Speicher pthread_mutex_unlock(....); return a; } void set(int a) { pthread_mutex_lock(...); //Speicherzugriff pthread_mutex_unlock(...); }
-
newbie1243 schrieb:
Hi. Danke für die schnellen Antworten, das problem ist ich habe noch nie mit Mutex gearbeitet, habt ihr da vielleicht irgendwelche tutorials, die ich mir durchlesen kann?
Wo kommen denn die Threads her? Also, welche Bibliothek/Schnittstelle wird benutzt?
Ich würde sonst immer Boost.Thread empfehlen -- auch weil man sich dann, wenn C++0x "rauskommt" nicht mehr großartig umgewöhnen muss.
Was Tutorials angeht, fällt mir spontan nur der Blog von Anthony Williams ein. Der hatte bei Boost.Thread seine Hände maßgeblich im Spiel. In der Artikel-Serie auf seinem Blog geht's allerdings um die Thread-Bibliothek des kommenden Standards, welche aber -- wie gesagt -- viele viele Ähnlichkeiten zu Boost.Thread aufweist.
Am besten ist wahrscheinlich ein gutes Buch (kann ich auch leider keine Tipps geben). Ich hatte das mit den threads, mutexes, condition variables erst richtig verstanden, als ich mir eine entsprechende Vorlesung ("parallel programming in java") angehört hatte. Mit "richtig verstehen" meine ich auch Design-Prinzipien und Herangehensweisen, die Fehler reduzieren.
Gruß,
SP