Commit f77f2876 authored by Alexander Alekhin's avatar Alexander Alekhin

Merge pull request #10800 from alalek:parallel_for_update

parents c973aaab 914f57f2
...@@ -197,7 +197,6 @@ public: ...@@ -197,7 +197,6 @@ public:
volatile bool stop_thread; volatile bool stop_thread;
volatile bool has_wake_signal; volatile bool has_wake_signal;
volatile bool dont_wait;
Ptr<ParallelJob> job; Ptr<ParallelJob> job;
...@@ -213,8 +212,7 @@ public: ...@@ -213,8 +212,7 @@ public:
posix_thread(0), posix_thread(0),
is_created(false), is_created(false),
stop_thread(false), stop_thread(false),
has_wake_signal(false), has_wake_signal(false)
dont_wait(false)
#if !defined(CV_USE_GLOBAL_WORKERS_COND_VAR) #if !defined(CV_USE_GLOBAL_WORKERS_COND_VAR)
, isActive(true) , isActive(true)
#endif #endif
...@@ -386,7 +384,7 @@ void WorkerThread::thread_body() ...@@ -386,7 +384,7 @@ void WorkerThread::thread_body()
while (!stop_thread) while (!stop_thread)
{ {
CV_LOG_VERBOSE(NULL, 5, "Thread: ... loop iteration: allow_active_wait=" << allow_active_wait << " has_wake_signal=" << has_wake_signal << " dont_wait=" << dont_wait ); CV_LOG_VERBOSE(NULL, 5, "Thread: ... loop iteration: allow_active_wait=" << allow_active_wait << " has_wake_signal=" << has_wake_signal);
if (allow_active_wait && CV_WORKER_ACTIVE_WAIT > 0) if (allow_active_wait && CV_WORKER_ACTIVE_WAIT > 0)
{ {
allow_active_wait = false; allow_active_wait = false;
...@@ -404,7 +402,7 @@ void WorkerThread::thread_body() ...@@ -404,7 +402,7 @@ void WorkerThread::thread_body()
#ifdef CV_PROFILE_THREADS #ifdef CV_PROFILE_THREADS
stat.threadWait = getTickCount(); stat.threadWait = getTickCount();
#endif #endif
while (!has_wake_signal && !dont_wait) // to handle spurious wakeups while (!has_wake_signal) // to handle spurious wakeups
{ {
//CV_LOG_VERBOSE(NULL, 5, "Thread: wait (sleep) ..."); //CV_LOG_VERBOSE(NULL, 5, "Thread: wait (sleep) ...");
#if defined(CV_USE_GLOBAL_WORKERS_COND_VAR) #if defined(CV_USE_GLOBAL_WORKERS_COND_VAR)
...@@ -416,7 +414,6 @@ void WorkerThread::thread_body() ...@@ -416,7 +414,6 @@ void WorkerThread::thread_body()
#endif #endif
CV_LOG_VERBOSE(NULL, 5, "Thread: wake ... (has_wake_signal=" << has_wake_signal << " stop_thread=" << stop_thread << ")") CV_LOG_VERBOSE(NULL, 5, "Thread: wake ... (has_wake_signal=" << has_wake_signal << " stop_thread=" << stop_thread << ")")
} }
dont_wait = false;
#ifdef CV_PROFILE_THREADS #ifdef CV_PROFILE_THREADS
stat.threadWake = getTickCount(); stat.threadWake = getTickCount();
#endif #endif
...@@ -479,7 +476,6 @@ void WorkerThread::thread_body() ...@@ -479,7 +476,6 @@ void WorkerThread::thread_body()
} }
else else
{ {
has_wake_signal = false;
CV_LOG_VERBOSE(NULL, 5, "Thread: no free job tasks"); CV_LOG_VERBOSE(NULL, 5, "Thread: no free job tasks");
} }
} }
...@@ -611,12 +607,11 @@ void ThreadPool::run(const Range& range, const ParallelLoopBody& body, double ns ...@@ -611,12 +607,11 @@ void ThreadPool::run(const Range& range, const ParallelLoopBody& body, double ns
#if !defined(CV_USE_GLOBAL_WORKERS_COND_VAR) #if !defined(CV_USE_GLOBAL_WORKERS_COND_VAR)
isActive = threads[i]->isActive; isActive = threads[i]->isActive;
#endif #endif
threads[i]->dont_wait = true; threads[i]->has_wake_signal = true;
#ifdef CV_PROFILE_THREADS #ifdef CV_PROFILE_THREADS
threads_stat[i + 1].reset(); threads_stat[i + 1].reset();
#endif #endif
pthread_mutex_unlock(&threads[i]->mutex); pthread_mutex_unlock(&threads[i]->mutex);
threads[i]->has_wake_signal = true;
#if !defined(CV_USE_GLOBAL_WORKERS_COND_VAR) #if !defined(CV_USE_GLOBAL_WORKERS_COND_VAR)
if (!isActive) if (!isActive)
{ {
...@@ -628,7 +623,6 @@ void ThreadPool::run(const Range& range, const ParallelLoopBody& body, double ns ...@@ -628,7 +623,6 @@ void ThreadPool::run(const Range& range, const ParallelLoopBody& body, double ns
{ {
CV_Assert(threads[i]->job.empty()); CV_Assert(threads[i]->job.empty());
threads[i]->job = job; threads[i]->job = job;
threads[i]->dont_wait = true;
threads[i]->has_wake_signal = true; threads[i]->has_wake_signal = true;
#ifdef CV_PROFILE_THREADS #ifdef CV_PROFILE_THREADS
threads_stat[i + 1].reset(); threads_stat[i + 1].reset();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment