0

我开发了一个程序,它在一开始就创建了一个线程。然后我想pthread_cancel()在线程运行时终止线程。

但是,如果我这样做,我会崩溃。这种崩溃并不总是重现。有时程序会避免崩溃。

pthread_cancel()如果取消的线程正在运行系统调用,我看到一些可能导致崩溃的地方。是真的吗?

dmesg 显示以下错误

myprogramd[1965]: segfault at c ip b76cdef3 sp bfcd5780 error 4 in libpthread-0.9.30.1.so[b76c6000+a000]
4

3 回答 3

0

我怀疑这是一个同步问题。我的意思是在取决于您要终止的线程的不同线程中,您可能正在访问可能无效并导致崩溃的东西。除非您有完整的代码要执行,否则我们无法指出崩溃。

至少尝试在gdb上运行您的代码并获取 backtrace。看这里

于 2012-11-08T15:51:42.577 回答
0

不要使用pthread_cancel(). 重构代码,使其收到关闭消息,而不影响共享内存并使事情变得不稳定。

于 2012-11-08T16:10:32.510 回答
0

崩溃与管理器线程有关。管理器线程在第一次启动时未正确终止,因此在第二次启动时创建新 pthread 时,旧线程管理器将导致崩溃。

有关详细信息,请参阅以下问题

如何用C杀死管理线程?

于 2012-11-11T18:23:16.353 回答