diff --git a/modules/core/src/parallel.cpp b/modules/core/src/parallel.cpp index 71ac94eec8..0d3a93a085 100644 --- a/modules/core/src/parallel.cpp +++ b/modules/core/src/parallel.cpp @@ -174,6 +174,9 @@ namespace double len = wholeRange.end - wholeRange.start; nstripes = cvRound(_nstripes <= 0 ? len : MIN(MAX(_nstripes, 1.), len)); + // propagate main thread state + rng = cv::theRNG(); + #ifdef ENABLE_INSTRUMENTATION pThreadRoot = cv::instr::getInstrumentTLSStruct().pCurrentNode; #endif @@ -195,6 +198,9 @@ namespace #endif CV_INSTRUMENT_REGION() + // propagate main thread state + cv::theRNG() = rng; + cv::Range r; r.start = (int)(wholeRange.start + ((uint64)sr.start*(wholeRange.end - wholeRange.start) + nstripes/2)/nstripes); @@ -208,6 +214,7 @@ namespace const cv::ParallelLoopBody* body; cv::Range wholeRange; int nstripes; + cv::RNG rng; #ifdef ENABLE_INSTRUMENTATION cv::instr::InstrNode *pThreadRoot; #endif