use C++11 static variables as memory barrier

This commit is contained in:
cyy 2020-06-09 15:49:31 +08:00
parent 434014b05e
commit 171cba4947

View File

@ -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)