Online-Skater
Erfahrenes Mitglied
@deep
Bei setVal sollte das Beispiel threadsicher sein, da keine return Anweisung vorhanden ist. Das Beispiel ist equivalent mit:
Aber bei den getMethoden, generell bei Schreibzugriff habe ich Return-Anweisung und da hast du Recht, der Destruktor wird davor aufgerufen.
@Cromon Es geht mir nicht um threadsicherheit im Destruktor, die Beispiele habe ich verwendet weil ich aktuell boost::mutex::lock_guard(..) benutze in Memberfunktionen.
Das mit dem möglicherweise veralteten Wert meine ich so: Ich habe die get und set Funktion (siehe oben)
mfg
Bei setVal sollte das Beispiel threadsicher sein, da keine return Anweisung vorhanden ist. Das Beispiel ist equivalent mit:
C++:
boost::mutex locker;
int Val;
void setVal(int v)
{
locker.lock():
Val = v;
locker.unlock();
}
Aber bei den getMethoden, generell bei Schreibzugriff habe ich Return-Anweisung und da hast du Recht, der Destruktor wird davor aufgerufen.
@Cromon Es geht mir nicht um threadsicherheit im Destruktor, die Beispiele habe ich verwendet weil ich aktuell boost::mutex::lock_guard(..) benutze in Memberfunktionen.
Das mit dem möglicherweise veralteten Wert meine ich so: Ich habe die get und set Funktion (siehe oben)
Code:
Thread1: getVal - temp. Variable angelegt
Thread1: getVal - mutex locked
Thread1: getVal - Zuweisung der temp. Variable
Thread1: getVal - mutex unlocked
Thread2: setVal - locked, schreibe Wert auf Val, unlocked
Thread1: getVal - return temp. Var // hier ist nun ein veralteter Wert
// Thread1 könnte auch mitten in der return-Anweisung unterbrochen werden
mfg
Zuletzt bearbeitet: