From 444f2f0e09e850026d191917cfb15be23100ba11 Mon Sep 17 00:00:00 2001 From: fundavid Date: Wed, 18 Dec 2024 19:53:51 +0800 Subject: [PATCH] static threadpool for reuse Signed-off-by: fundavid --- .../include/code_sign_enable_multi_task.h | 4 +++- .../src/code_sign_enable_multi_task.cpp | 14 +++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) 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 46f504a..222eef2 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 0166175..08ed0a7 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) -- Gitee