Ich habe C# für die letzten paar Jahre verwendet und ich bin derzeit Bugfixing in C++. In C# könnte ich Sperre für ein Objekt verwenden, um meinen Code Thread-sicher mit zu machen:Automatisches Sperren/Entsperren mit dem Bereich in C++ (von C# Hintergrund)
lock(lockObject)
{
// Do some work
}
Dies würde Entsperren der lockOject wenn es eine Ausnahme innerhalb der
// Do some work
war Gibt es etwas ähnliches in C++? Im Moment kann ich entweder denken:
// Code
{
AutoLock lock(lockObject);
// Do some work
}
// More Code
Aber ich weiß nicht, wie die geschweiften Klammern nur Umfang meines AutoLock
. Im Moment habe ich so mache:
AutoLock lock(lockObject);
// Do some work
lock.Unlock();
und Abwickeln Release lassen Ausnahme die Sperre, wenn es eine Ausnahme in //Do some work
.
Was ich gerade mache funktioniert, aber ich frage mich, ob es einen besseren Weg gibt, danke.
_Aber ich mag die geschweiften Klammern nicht, nur um meine 'AutoLock' zu erfassen._ Abgesehen von ihrer Platzierung, wie unterscheiden sie sich von dem, was in C# getan wird? –
Mit C# ''using (..) {...}' und 'lock (...) {...}' können Sie sehen, was vor sich geht. Es fühlt sich einfach falsch an, nur ein leeres '{...}' zu haben, um einen lokalen Bereich zu erstellen, um 'Autolock' zu zerstören. – JLWarlow
Das macht Sinn. Ein Vorteil von C++ ist, dass Sie nur einen Bereich benötigen, um mehrere Sperren zu bereinigen. Wenn ich mich richtig erinnere, kann man in C# Dinge wie 'lock (m0) {Sperre (m1) {Sperre (m2) {}}}' –