|
|
|
@ -364,15 +364,8 @@ bool __termination; // skip some cleanups, because process is terminating |
|
|
|
|
|
|
|
|
|
cv::Mutex& getInitializationMutex(); |
|
|
|
|
|
|
|
|
|
// TODO Memory barriers?
|
|
|
|
|
#define CV_SINGLETON_LAZY_INIT_(TYPE, INITIALIZER, RET_VALUE) \ |
|
|
|
|
static TYPE* volatile instance = NULL; \
|
|
|
|
|
if (instance == NULL) \
|
|
|
|
|
{ \
|
|
|
|
|
cv::AutoLock lock(cv::getInitializationMutex()); \
|
|
|
|
|
if (instance == NULL) \
|
|
|
|
|
instance = INITIALIZER; \
|
|
|
|
|
} \
|
|
|
|
|
static TYPE* const instance = INITIALIZER; \
|
|
|
|
|
return RET_VALUE; |
|
|
|
|
|
|
|
|
|
#define CV_SINGLETON_LAZY_INIT(TYPE, INITIALIZER) CV_SINGLETON_LAZY_INIT_(TYPE, INITIALIZER, instance) |
|
|
|
|