die folgende Klasse Betrachten:Wann würden Getter und Setter mit Mutex threadsicher sein?
class testThreads
{
private:
int var; // variable to be modified
std::mutex mtx; // mutex
public:
void set_var(int arg) // setter
{
std::lock_guard<std::mutex> lk(mtx);
var = arg;
}
int get_var() // getter
{
std::lock_guard<std::mutex> lk(mtx);
return var;
}
void hundred_adder()
{
for(int i = 0; i < 100; i++)
{
int got = get_var();
set_var(got + 1);
sleep(0.1);
}
}
};
Wenn ich zwei Threads in main() erzeugen, die jeweils mit einer Gewinde-Funktion von hundred_adder
die gleiche Variable var Modifizieren, ist das Endergebnis des var immer anders dh nicht mehr als 200, aber eine andere Nummer.
Aus konzeptionellen Gründen, warum ist diese Verwendung von Mutex mit Getter-und Setter-Funktionen nicht Thread-sicher? Vereiteln die Lock-Guards nicht den Race-Condition zu var? Und was wäre eine alternative Lösung?
A - erhalten, B - bekommen, A - setzen, B - setzen. :( –