From 2256ac8964a4f5b95ebfdfba018b10dcad717b27 Mon Sep 17 00:00:00 2001 From: Lord-Turmoil Date: Fri, 29 Nov 2024 13:12:18 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9D=93seems=20to=20be=20false=20positive=20o?= =?UTF-8?q?f=20TSan=20=F0=9F=94=A8refactored=20thread=20pool=20test=20?= =?UTF-8?q?=F0=9F=9A=ABdecided=20to=20remove=20TSan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/ThreadPoolTest.cpp | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/tests/ThreadPoolTest.cpp b/tests/ThreadPoolTest.cpp index 750403b..1c03da4 100644 --- a/tests/ThreadPoolTest.cpp +++ b/tests/ThreadPoolTest.cpp @@ -4,38 +4,42 @@ #include "doctest.h" +#include #include +struct task_t +{ + std::packaged_task task; + std::future result; +}; + +void func(task_t* task) +{ + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + task->task(); +} + TEST_CASE("ThreadPool") { using namespace minet::threading; static constexpr int TASK_NUM = 1024; - std::future results[TASK_NUM]; - std::packaged_task tasks[TASK_NUM]; - // Make it busier? - unsigned int threads = HardwareConcurrency(); + std::array tasks; + + unsigned threads = HardwareConcurrency(); ThreadPool pool(threads, TASK_NUM / threads); - for (int i = 0; i < TASK_NUM; i++) - { - tasks[i] = std::packaged_task([i]() { - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - return i; - }); - results[i] = tasks[i].get_future(); - } + task_t* task = tasks.data(); for (int i = 0; i < TASK_NUM; i++) { - // clang-format off - CHECK_EQ(pool.Submit([&tasks, i]() { - tasks[i](); - }), true); - // clang-format on + task->task = std::packaged_task([i]() { return i; }); + task->result = tasks[i].task.get_future(); + pool.Submit([task]() { func(task); }); + task++; } for (int i = 0; i < TASK_NUM; i++) { - CHECK_EQ(results[i].get(), i); + CHECK(tasks[i].result.get() == i); } }