【发布时间】:2012-10-01 09:17:11
【问题描述】:
我有一个应用程序,其中我有 1 个主线程,它创建 10 个不同的线程来完成某些工作。在应用程序结束时,当我尝试退出时,应用程序无法干净地退出。堆栈跟踪不是那么有用,但它显示函数“cancel_deliver()”中的崩溃我的第一个猜测是这是在释放每个线程使用的资源时进行的一些底层调用,但并不完全确定。
fyi:每个线程的回调函数都有一个while(1)循环:
这里是sn-p
void main (...)
{
pthread_t tid;
for (int i=0; i<10; i++)
pthread_create(&tid, NULL, xyzCallback, NULL);
}
void xyzCallback(void* data)
{
while (1)
{
////
}
}
void atExit()
{
exit(1);
}
我可以做些什么来释放我的线程使用的资源并干净地退出?
【问题讨论】:
-
加入你的话题!
-
向我们展示
cancel_deliver的代码。 -
据我所知,您不必加入。使用 exit() 退出应该没问题。我的猜测是问题出在其他地方。线程有什么作用?你的目标是什么平台?不过,如果您可以退出线程,例如通过从回调返回,看看问题是否消失会很有趣。
-
堆栈跟踪显示 ._cancel_deliver 正在从 pthread_self(..) 调用,生成线程中的处理完全独立于主线程。这目前正在 AIX 平台上发生。
标签: c multithreading