我开发了一个程序,在开始时创建一个线程。然后我想在线程运行时用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]
答案 0 :(得分:0)
我怀疑它是同步问题。我的意思是在一个不同的线程中,它取决于您正在终止的线程,您可能正在访问可能无效并导致崩溃的内容。除非你有完整的代码要执行,否则我们无法指出崩溃。
至少尝试在gdb和get the backtrace 上运行您的代码。 看here
答案 1 :(得分:0)
请勿使用pthread_cancel()
。重构代码,使其收到要关闭的消息,不会影响共享内存并使事情不稳定。
答案 2 :(得分:0)
崩溃与经理线程有关。在第一次启动时,管理器线程没有被正确杀死所以在第二次启动时,新的线程管理器将导致崩溃。
有关详细信息,请参阅以下问题