Добрый день
void MainCalc( CalcParam & theParam )
#pragma omp parallel for // это считаем параллельно
for (i = 0; i < num; ++i)
DoCalc(theParam);
MonoCalc(theParam); // а это в главной нитке
}
void DoCalc( CalcParam & theParam )
{
..... // расчеты
LOCK; // берем лок
CalcParam temp = theParam; // делаем копию theParam
SetupParam(&theParam); // изменяем theParam
UNLOCK; // вынуждены снять лок
DoCalc(theParam); // ушли в рекурс
LOCK; // берем лок
theParam = temp; // восстановили theParam
UNLOCK; // сняли лок
}
Ну наверное увидеть ошибку не составит труда