如果用 运行 pthread 删除一个对象会发生什么?

What happens if one deletes an object with a running pthread?

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

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

如果不删除,在删除过程中会发生什么?即,如果删除运算符突然尝试释放对象,未终止线程会发生什么情况?

提前感谢所有回复。 :)

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

pthread_join

The pthread_join() function waits for the thread specified by thread to terminate. If that thread has already terminated, then pthread_join() returns immediately. The thread specified by thread must be joinable.

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

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