如果用 运行 pthread 删除一个对象会发生什么?
What happens if one deletes an object with a running pthread?
我有一个使用 pthreads 的对象。它的构造函数创建了几个线程。
class 的析构函数在所有这些线程上调用 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 的每个实现),但通常它们只是对表示线程的底层系统对象的引用。因此,您将失去对该线程的引用,并且以后可能无法加入它,但该线程将继续 运行。
我有一个使用 pthreads 的对象。它的构造函数创建了几个线程。
class 的析构函数在所有这些线程上调用 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 的每个实现),但通常它们只是对表示线程的底层系统对象的引用。因此,您将失去对该线程的引用,并且以后可能无法加入它,但该线程将继续 运行。