LINUX.ORG.RU

Как наглядно показать, что используется несколько потоков?

 , ,


0

3

Написал две сортировки для бинарного дерева. Однопоточная и многопоточная.(Сортировка меняет левое и правое поддерево)

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;
}

Ответ на: комментарий от DELIRIUM

А именно из программы возможно?

Показать кому?

То есть, чтобы это каким-то образом отображалось в потоке вывода.

timas-cs
() автор топика

Имхо, тут бы хорошо подошел std::async, с deferred для однопоточного случая.

anonymous
()

std::cerr << "ВНИМАНИЕ! Используется несколько потоков!" << std::endl;

Deleted
()
Ответ на: комментарий от trex6

Эти std::thread они где-то регаются? В смысле, можно ли получить полный список всех созданных std::thread, которые активны? Ведь в htop и других программулях это отображается. Может и программа внутри себя может это видеть.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Получить список потоков - не очень сложная задача. Вот только что потом с ними дальше делать? Это ведь будут не std::thread.

trex6 ★★★★★
()
Последнее исправление: trex6 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.