我有一个使用pthreads的对象。它的构造函数创建了几个线程。
类的析构函数在所有这些线程上调用pthread_join。
删除过程中会发生什么,如果没有?即,如果删除操作符突然尝试释放对象,那么未终止的线程会发生什么?
提前感谢所有回复。 :)
答案 0 :(得分:0)
使用连接,析构函数将阻塞,直到所有连接的线程都退出。
pthread_join()函数等待thread指定的线程 终止。如果该线程已经终止,那么 pthread_join()立即返回。线程指定的线程 必须可以加入。
如果您不加入线程,它们将继续运行。这可能会产生各种后果,具体取决于您是否调用未定义的行为(例如,在析构函数退出其中一个仍在运行的线程后尝试引用已删除的对象)。
删除pthread_t
对象可能会产生影响,具体取决于您的系统(我不知道pthread的每个实现),但一般来说它们只是引用代表该线程的底层系统对象。所以你将失去对该线程的引用,并且可能以后无法加入它,但该线程将继续运行。