diff --git a/winml/lib/Api/LearningModelDevice.cpp b/winml/lib/Api/LearningModelDevice.cpp index ef0bf8e430..011ca06fdf 100644 --- a/winml/lib/Api/LearningModelDevice.cpp +++ b/winml/lib/Api/LearningModelDevice.cpp @@ -53,16 +53,12 @@ Windows::AI::MachineLearning::LearningModelDevice LearningModelDevice::CreateFro WINML_CATCH_ALL std::shared_ptr<::Windows::AI::MachineLearning::ConverterResourceStore> LearningModelDevice::TensorizerStore() { - if (m_tensorizerStore == nullptr) { - m_tensorizerStore = ::Windows::AI::MachineLearning::ConverterResourceStore::Create(5); - } + std::call_once(m_tensorizerStoreInitialized, [this](){ m_tensorizerStore = ::Windows::AI::MachineLearning::ConverterResourceStore::Create(5); }); return m_tensorizerStore; } std::shared_ptr<::Windows::AI::MachineLearning::ConverterResourceStore> LearningModelDevice::DetensorizerStore() { - if (m_detensorizerStore == nullptr) { - m_detensorizerStore = ::Windows::AI::MachineLearning::ConverterResourceStore::Create(5); - } + std::call_once(m_detensorizerStoreInitialized, [this](){ m_detensorizerStore = ::Windows::AI::MachineLearning::ConverterResourceStore::Create(5); }); return m_detensorizerStore; } diff --git a/winml/lib/Api/LearningModelDevice.h b/winml/lib/Api/LearningModelDevice.h index ce20a4b765..26639d7c7e 100644 --- a/winml/lib/Api/LearningModelDevice.h +++ b/winml/lib/Api/LearningModelDevice.h @@ -84,7 +84,9 @@ struct LearningModelDevice : LearningModelDeviceT m_detensorizerStore; + std::once_flag m_detensorizerStoreInitialized; std::shared_ptr m_tensorizerStore; + std::once_flag m_tensorizerStoreInitialized; std::unique_ptr m_deviceCache; };