Merge pull request #5765 from alalek:pthread_mutex_init

This commit is contained in:
Vadim Pisarevsky 2015-12-08 16:49:41 +00:00
commit a15707bc57

View File

@ -155,22 +155,9 @@ public:
static ThreadManager& instance()
{
if(!m_instance.ptr)
{
pthread_mutex_lock(&m_manager_access_mutex);
if(!m_instance.ptr)
{
m_instance.ptr = new ThreadManager();
CV_SINGLETON_LAZY_INIT_REF(ThreadManager, new ThreadManager())
}
pthread_mutex_unlock(&m_manager_access_mutex);
}
return *m_instance.ptr;
}
static void stop()
{
ThreadManager& manager = instance();
@ -194,21 +181,6 @@ public:
private:
struct ptr_holder
{
ThreadManager* ptr;
ptr_holder(): ptr(NULL) { }
~ptr_holder()
{
if(ptr)
{
delete ptr;
}
}
};
ThreadManager();
~ThreadManager();
@ -231,8 +203,7 @@ private:
unsigned int m_task_position;
unsigned int m_num_of_completed_tasks;
static pthread_mutex_t m_manager_access_mutex;
static ptr_holder m_instance;
pthread_mutex_t m_manager_access_mutex;
static const char m_env_name[];
static const unsigned int m_default_number_of_threads;
@ -250,13 +221,6 @@ private:
ThreadManagerPoolState m_pool_state;
};
#ifndef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP PTHREAD_RECURSIVE_MUTEX_INITIALIZER
#endif
pthread_mutex_t ThreadManager::m_manager_access_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
ThreadManager::ptr_holder ThreadManager::m_instance;
const char ThreadManager::m_env_name[] = "OPENCV_FOR_THREADS_NUM";
#ifdef ANDROID
@ -383,6 +347,12 @@ ThreadManager::ThreadManager(): m_num_threads(0), m_task_complete(false), m_num_
{
int res = 0;
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
res |= pthread_mutex_init(&m_manager_access_mutex, &attr);
pthread_mutexattr_destroy(&attr);
res |= pthread_mutex_init(&m_manager_task_mutex, NULL);
res |= pthread_cond_init(&m_cond_thread_task_complete, NULL);