2016-09-29 86 views
0

我有一个使用pthreads的对象。它的构造函数创建了几个线程。如果用正在运行的pthread删除一个对象会发生什么?

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

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

在此先感谢所有答复。 :)

+0

在最好的情况下程序崩溃。如果没有,它会在你的程序的内存中出现故障 – Hayt

回答

0

随着连接,你的析构函数会阻塞,直到所有的连接线程退出。

pthread_join

的在pthread_join()函数等待由线程 指定来终止线程。如果该线程已经终止,则 pthread_join()立即返回。线程 指定的线程必须可以连接。

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

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

相关问题