C++ (Qt)static QT::HANDLE theOwner = 0;static QMutex theMutex; void DoSomethingRecursive( void ){// захватываем мутекс если он еще не захвачен текущей ниткой bool doRelease = false; Qt::HANDLE curID = QThread::currentThreadId(); if (curId != theOwner) { theMutex.lock(); theOwner = curId; doRelease = true; } // считаем под защитой мутекса ... DoSomethingRecursive(); // возможен рекурс ... // освобождаем для рекурсии уровня 0 if (doRelease) { theOwner = 0; theMutex.unlock(); }}
C++ (Qt)theMutex.lock();myList.push_back(newData);theMutex.unlock();