pthread_cancel()崩溃我的程序

时间:2012-11-08 15:40:10

标签: c pthreads

我开发了一个程序,在开始时创建一个线程。然后我想在线程运行时用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]

3 个答案:

答案 0 :(得分:0)

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

至少尝试在gdbget the backtrace 上运行您的代码。 看here

答案 1 :(得分:0)

请勿使用pthread_cancel()。重构代码,使其收到要关闭的消息,不会影响共享内存并使事情不稳定。

答案 2 :(得分:0)

崩溃与经理线程有关。在第一次启动时,管理器线程没有被正确杀死所以在第二次启动时,新的线程管理器将导致崩溃。

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

How to kill the management thread with C?