Ich möchte nach dem einfachsten Mutex-Ansatz für Multi-Threading fragen. Ist der folgende Code threadsicher (quick-n-dirty)?Einfachster Mutex aller Zeiten. Funktioniert dieses Beispiel? Ist es threadsicher?
class myclass
{
bool locked;
vector<double> vals;
myclass();
void add(double val);
};
void myclass::add(double val)
{
if(!locked)
{
this->locked = 1;
this->vals.push_back(val);
this->locked = 0;
}
else
{
this->add(val);
}
}
int main()
{
myclass cls;
//start parallelism
cls.add(static_cast<double>(rand()));
}
Funktioniert das? Ist es threadsicher? Ich versuche nur zu verstehen, wie der einfachste Mutex geschrieben werden kann.
Wenn Sie einen Rat zu meinem Beispiel haben, wäre nett.
Vielen Dank.
Danke für die Aussage, dass es nicht funktioniert. Können Sie bitte eine Korrektur vorschlagen, die vom Compiler unabhängig ist?
Einen korrekten Mutex-Mechanismus zu erstellen ist ein komplexes Geschäft. Ich würde etwas schon da draußen benutzen. – andre
Im Allgemeinen erfordern Synchronisationsgrundelemente wie Mutexe eine gewisse Atomizität (oft auf CPU-Befehlsebene). Hier ist ein interessanter Link, den ich gefunden habe: http://lists.canonical.org/pipermail/kragen-tol/1999-August/000457.html – Tom
Der einfachste Mutex (oder Synchronisationskonstrukt im Allgemeinen) ist der, den Sie nicht brauchen; -) – delnan