From 510d1e4e4be65bc6d4227ea9ff952a8ef4048a5b Mon Sep 17 00:00:00 2001 From: robtor Date: Mon, 6 Nov 2023 21:13:13 +0100 Subject: [PATCH] fix errors --- task1/main.cpp | 8 ++++---- task1/mergesort_mt.h | 15 ++++++++++----- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/task1/main.cpp b/task1/main.cpp index a2fdad9..d89a947 100644 --- a/task1/main.cpp +++ b/task1/main.cpp @@ -67,16 +67,16 @@ auto main(int argc, char *argv[]) -> int { //const int max_depth = std::thread::hardware_concurrency(); const int max_depth = 4; t1 = std::chrono::high_resolution_clock::now(); - MergeSorterMT ms([](int a, int b) { + MergeSorterMT ms([](int a, int b) { return (a>b); }); std::span t = dataset_par; int mdepth = 4; std::recursive_mutex mut; ms.split(t, 0, mdepth, mut); - algo::MergeSort_mt::sort(dataset_par, [](int32_t a, int32_t b) { - return (a > b); - }, max_depth); +// algo::MergeSort_mt::sort(dataset_par, [](int32_t a, int32_t b) { +// return (a > b); +// }, max_depth); t2 = std::chrono::high_resolution_clock::now(); delay_ms = std::chrono::duration_cast(t2 - t1); diff --git a/task1/mergesort_mt.h b/task1/mergesort_mt.h index f88ff4b..4853ad2 100644 --- a/task1/mergesort_mt.h +++ b/task1/mergesort_mt.h @@ -3,14 +3,17 @@ #include #include -template +template class MergeSorterMT { public: - MergeSorterMT(C cmp) : cmp(cmp){} + template + MergeSorterMT(C cmp) : cmp(cmp){ + static_assert(std::is_same, bool>(), "C must be a function that returns a bool"); + } - C cmp; + std::function cmp; std::recursive_mutex mut; auto merge(std::span &output, std::span left, std::span right) -> void { @@ -60,8 +63,10 @@ public: std::span right(mid, data.end()); if(depth < max_depth) { - std::thread left_thread(&MergeSorterMT::split, this, left, depth + 1, max_depth, mut); - std::thread right_thread(&MergeSorterMT::split, this, right, depth + 1, max_depth, mut); + //std::thread left_thread(&MergeSorterMT::split, this, left, depth + 1, max_depth, mut); + //std::thread right_thread(&MergeSorterMT::split, this, right, depth + 1, max_depth, mut); + std::thread left_thread([&](){split(left, depth + 1, max_depth, mut);}); + std::thread right_thread([&](){split(right, depth + 1, max_depth, mut);}); left_thread.join(); right_thread.join();