如果删除具有正在运行的pthread的对象会发生什么?

时间:2016-09-29 13:30:07

标签: c++ pthreads delete-operator pthread-join

我有一个使用pthreads的对象。它的构造函数创建了几个线程。

类的析构函数在所有这些线程上调用pthread_join。

删除过程中会发生什么,如果没有?即,如果删除操作符突然尝试释放对象,那么未终止的线程会发生什么?

提前感谢所有回复。 :)

1 个答案:

答案 0 :(得分:0)

使用连接,析构函数将阻塞,直到所有连接的线程都退出。

pthread_join

  

pthread_join()函数等待thread指定的线程          终止。如果该线程已经终止,那么          pthread_join()立即返回。线程指定的线程          必须可以加入。

如果您不加入线程,它们将继续运行。这可能会产生各种后果,具体取决于您是否调用未定义的行为(例如,在析构函数退出其中一个仍在运行的线程后尝试引用已删除的对象)。

删除pthread_t对象可能会产生影响,具体取决于您的系统(我不知道pthread的每个实现),但一般来说它们只是引用代表该线程的底层系统对象。所以你将失去对该线程的引用,并且可能以后无法加入它,但该线程将继续运行。