Utilizzo C# da alcuni anni e attualmente risolvo bug in C++. In C# ho potuto utilizzare il blocco su un oggetto per fare il mio filo di codice sicuro con:Blocco/sblocco automatico utilizzando scope in C++ (da sfondo C#)
lock(lockObject)
{
// Do some work
}
Ciò sbloccare il lockOject se ci fosse un'eccezione all'interno della // Do some work
C'è qualcosa di simile in C++? Al momento mi viene in mente uno:
// Code
{
AutoLock lock(lockObject);
// Do some work
}
// More Code
Ma non mi piace le parentesi graffe solo a scopo mia AutoLock
. Al momento sto facendo:
AutoLock lock(lockObject);
// Do some work
lock.Unlock();
E lasciando eccezione rilascio svolgimento il blocco se c'è un'eccezione in //Do some work
.
Quello che sto facendo al momento funziona, ma mi chiedo se c'è un modo migliore, grazie.
_Ma non mi piacciono le parentesi graffe solo per eseguire il mio 'AutoLock'._ A parte il loro posizionamento, come sono differenti da quello che viene fatto in C#? –
Con l'uso di C# (..) {...} 'e' lock (...) {...} 'puoi vedere cosa sta succedendo. Mi sembra semplicemente sbagliato avere semplicemente '{...}' per creare un ambito locale per effettuare la distruzione di 'Autolock'. – JLWarlow
Questo ha senso. Un vantaggio del modo di fare C++ è che è necessario un solo scope per ripulire più blocchi; se ricordo bene, in C# puoi finire con cose come 'lock (m0) {lock (m1) {lock (m2) {}}}' –