Добрый деньКод: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; // делаем копию theParamSetupParam(&theParam); // изменяем theParamUNLOCK; // вынуждены снять локDoCalc(theParam); // ушли в рекурсLOCK; // берем локtheParam = temp; // восстановили theParamUNLOCK; // сняли лок }Ну наверное увидеть ошибку не составит труда
|