int complexFunction(int flag) { mutex.lock(); int retVal = 0; switch (flag) { case 0: case 1: mutex.unlock(); return moreComplexFunction(flag); /* Вот тут на мой взгляд "косяк" если например moreComplexFunction nothreadsafe, то смысл мутекса в этой функции теряется, по этому я бы zделал так:... case 1: retVal = moreComplexFunction(flag); mutex.unlock(); return retVal;...но это мелочь :)*/ case 2: { int status = anotherFunction(); if (status < 0) { mutex.unlock(); return -2; } retVal = status + flag; } break; default: if (flag > 10) { mutex.unlock(); return -1; } break; } mutex.unlock(); return retVal; }
int complexFunction(int flag) { QMutexLocker locker(&mutex); int retVal = 0; switch (flag) { case 0: case 1: return moreComplexFunction(flag); case 2: { int status = anotherFunction(); if (status < 0) return -2; retVal = status + flag; } break; default: if (flag > 10) return -1; break; } return retVal; }
//C++void func(/*...*/) { static bool lock = false; if (!lock) { lock = true; //work to data lock = false; }}
QImage scaled(const QImage &image){ return image.scaled(QSize(100, 100));}...const QList<QImage> images = ...const QList<QImage> thumbnails = QtConcurrent::mapped(images, scaled);