diff --git a/interfaces/inner_api/code_sign_utils/include/code_sign_enable_multi_task.h b/interfaces/inner_api/code_sign_utils/include/code_sign_enable_multi_task.h index 46f504a05051fefe01bb1d8c64281431d8704777..222eef2c3fa76021bc71ab5a433d39ca56a4218b 100644 --- a/interfaces/inner_api/code_sign_utils/include/code_sign_enable_multi_task.h +++ b/interfaces/inner_api/code_sign_utils/include/code_sign_enable_multi_task.h @@ -67,7 +67,9 @@ private: std::mutex cvLock_; std::condition_variable taskfinish_; std::vector> enableData_; - OHOS::ThreadPool enableCodeSignTaskWorker_; + static std::mutex tpLock_; + static OHOS::ThreadPool enableCodeSignTaskWorker_; + static bool threadPoolInitialed; uint32_t taskCallBack_; }; } diff --git a/interfaces/inner_api/code_sign_utils/src/code_sign_enable_multi_task.cpp b/interfaces/inner_api/code_sign_utils/src/code_sign_enable_multi_task.cpp index 01661753a30751ebaa891c82cef8f367681da613..08ed0a78d6d1bd7fa5e2e9b436075ff9bd7e608d 100644 --- a/interfaces/inner_api/code_sign_utils/src/code_sign_enable_multi_task.cpp +++ b/interfaces/inner_api/code_sign_utils/src/code_sign_enable_multi_task.cpp @@ -34,17 +34,25 @@ namespace Security { namespace CodeSign { constexpr uint32_t CODE_SIGN_TASK_TIMEOUT_MS = 300000; constexpr uint32_t DEFAULT_THREADS_NUM = 8; +OHOS::ThreadPool CodeSignEnableMultiTask::enableCodeSignTaskWorker_("EnableCodeSign"); +bool CodeSignEnableMultiTask::threadPoolInitialed = false; +std::mutex CodeSignEnableMultiTask::tpLock_; -CodeSignEnableMultiTask::CodeSignEnableMultiTask(): enableCodeSignTaskWorker_("EnableCodeSign"), taskCallBack_(0) +CodeSignEnableMultiTask::CodeSignEnableMultiTask(): taskCallBack_(0) { LOG_INFO("Tasks init."); - enableCodeSignTaskWorker_.Start(DEFAULT_THREADS_NUM); + if (!threadPoolInitialed) { + std::lock_guard lock(tpLock_); + if (!threadPoolInitialed) { + threadPoolInitialed = true; + enableCodeSignTaskWorker_.Start(DEFAULT_THREADS_NUM); + } + } } CodeSignEnableMultiTask::~CodeSignEnableMultiTask() { LOG_INFO("Tasks finish."); - enableCodeSignTaskWorker_.Stop(); } void CodeSignEnableMultiTask::AddTaskData(const std::string &targetFile, const struct code_sign_enable_arg &arg)