He estado usando C# durante los últimos años y actualmente estoy corrigiendo errores en C++. En C# que podría utilizar el bloqueo en un objeto de hacer mi hilo de código seguro con:Bloqueo/desbloqueo automático usando el alcance en C++ (desde el fondo C#)
lock(lockObject)
{
// Do some work
}
Esto desbloquear el lockOject si había una excepción dentro del // Do some work
¿Hay algo similar en C++? En el momento en que se me ocurre ya sea:
// Code
{
AutoLock lock(lockObject);
// Do some work
}
// More Code
Pero no me gustan las llaves sólo para mi alcance AutoLock
. En el momento que estoy haciendo:
AutoLock lock(lockObject);
// Do some work
lock.Unlock();
Y dejar excepción liberación desenrollar el bloqueo si hay una excepción en //Do some work
.
Lo que estoy haciendo en este momento funciona, pero me pregunto si hay una mejor manera, gracias.
_Pero no me gustan las llaves para ampliar mi 'AutoLock'._ Además de su ubicación, ¿cómo son diferentes de lo que se hace en C#? –
Con C# 'using (..) {...} 'y' lock (...) {...} 'puedes ver lo que está pasando. Simplemente me parece mal tener solo '{...}' vacío para crear un alcance local para hacer que 'Autolock' se destruya. – JLWarlow
Eso tiene sentido. Una de las ventajas de la forma C++ de hacer las cosas es que solo necesita un alcance para limpiar múltiples bloqueos; si recuerdo bien, en C# puede terminar con cosas como 'lock (m0) {lock (m1) {lock (m2) {}}}' –