Написал две сортировки для бинарного дерева. Однопоточная и многопоточная.(Сортировка меняет левое и правое поддерево)
b.sort();
b.sortParallel();
.
Как наглядно показать, что используется несколько потоков?
void Btree<T>::sort()
{
sortHelper(*this, false);
}
void Btree<T>::sortParallel()
{
sortHelper(*this, true);
}
void Btree<T>::sortHelper(Btree<T>& b, bool isParallel)
{
...
if (isParallel)
{
std::future<void> leftFu = sortParallelHelper(left);
std::future<void> rightFu = sortParallelHelper(right);
leftFu.get();
rightFu.get();
}
...
template <class T>
std::future<void> Btree<T>::sortParallelHelper(Btree<T>& q)
{
auto funcObj = std::bind(&Btree<T>::sortHelper, this, std::ref(q), true);
std::packaged_task<void()> task(funcObj);
std::future<void> res(task.get_future());
std::thread th(std::move(task));
th.detach();
return res;
}