проверка на потоки, все еще работающие после выхода из программы

gcc 4.4.3 c89 pthreads

Я использую valgrind для проверки ошибок памяти. [1280 Мне просто интересно, есть ли какой-нибудь инструмент для linux, который может обнаруживать запущенные потоки, которые не были прерваны после завершения программы.

Я запускаю многопоточное приложение и мне нужен инструмент, чтобы убедиться, что все потоки завершены ,

Большое спасибо за любые предложения,

10
задан ant2009 30 August 2010 в 05:03
поделиться

4 ответа

Если программа завершилась (поскольку исходный поток вернулся из main(), какой-то поток вызвал exit() или процесс получил фатальный сигнал), то вы гарантируется, что все потоки были прекращены с крайним предубеждением.


Если вы хотите написать свою программу так, чтобы она гарантировала завершение работы всех своих потоков до выхода main(), вам нужно перебрать все потоки в конце из main(), вызывая pthread_join() для каждого из них. (Это также означает, что вы не должны создавать свои потоки отсоединенными или отсоединять их).

15
ответ дан 3 December 2019 в 13:29
поделиться

Если вы планируете использовать библиотеку Boost.Threads, вы можете использовать метод .join().

Например:

#include <boost/thread/thread.hpp>
#include <iostream>
void hello()
{
  std::cout <<
    "Hello world, I'm a thread!"
    << std::endl;
}

int main(int argc, char* argv[])
{
  boost::thread thrd(&hello);
  thrd.join();
  return 0;
}
6
ответ дан 3 December 2019 в 13:29
поделиться

Если это потоки (а не процессы), вам просто нужно проверить, работает ли ваш процесс, потому что потоки выполняются внутри процесса.

Вы можете проверить, запущен ли процесс с помощью ps -ef, а затем передать результат в grep, чтобы найти ваш конкретный процесс.

0
ответ дан 3 December 2019 в 13:29
поделиться

Поправьте меня, если я ошибаюсь, но программа не будет завершена, пока не закончатся все запущенные потоки.

3
ответ дан 3 December 2019 в 13:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: