停止线程时的pthread_exit用法

时间:2014-02-25 13:26:04

标签: c++ linux pthreads

我正在创建一个像

这样的线程
pthread_create(&mon_thread, NULL, &ClassA::m_thread, this);

运行以下函数

void* ClassA::m_thread(void *arg){

  while (!halt_tx) {
  .....}
}

在停止期间我设置halt_tx = 1并让线程到达函数的结尾并在析构函数中调用join函数

ClassA::~ClassA()
{
   pthread_join(monitor_thread, NULL);
}

我的问题是我是否也应该在停止线程时调用pthread_exit(NULL)。

2 个答案:

答案 0 :(得分:1)

没有

ClassA::m_thread函数结束时,会隐式调用pthread_exit,并将函数的返回值作为线程退出状态。

确保有正确的退货声明。

答案 1 :(得分:0)

pthread_exit的手册页说:

 Performing a return from the start function of any thread other than the main thread results in an implicit call to pthread_exit()

创建线程对于机器来说是非常耗费资源的。在类中隐式创建线程是一个坏主意,至少没有类的名称使线程创建非常清楚。对于我正在处理的项目,我有一个ConsumerThread类,它由希望成为使用者的类继承,它启动一个线程并设置一个队列。开发人员无法实例化名为ConsumerThread的类,然后在创建线程时感到惊讶。但是,开发人员可以创建ClassA,而不知道是否创建了一个线程。即使在编写测试代码时,我也非常小心地确保通过类名来创建线程,以防类在弱点时泄漏到生产中。