Pthread在互斥锁中间死亡

Lei*_*sen 4 c++ android mutex pthreads android-ndk

我在想以下情况在pthread运行时发生:

pthread_mutex_lock(...);
... // <- Thread dies here
pthread_mutex_unlock(...);
Run Code Online (Sandbox Code Playgroud)

换句话说,pthread启动,在某个时候它锁定了一个互斥锁,并且由于某种原因,它在能够调用匹配的解锁函数之前就死了,要么是因为另一个线程杀死了它,要么是因为操作系统本身(在这种情况下是android) ),决定出于某种原因(需要做其他事情等)将其杀死。

如果不调用pthread_kill()或类似的东西,这种情况是否会在android(或其他任何操作系统)上发生?即使您这样做了,避免这种事情发生的正确方法是什么?谢谢。

seh*_*ehe 5

杀死线程从来就不是很有用。(除非您负担得起SIGKILL /中止整个过程)。

而是使用异常展开堆栈并使用RAII。如果您的进程/ OS变得非常不稳定,以至于随机线程中止,那么我想您还会有其他烦恼,由此造成的混乱不属于进程的责任。

只是不 pthread_kill

同样,使用进程间同步原语时,所有这些可能会变得更加有趣。不过,在那种情况下,我认为Linux内核可以确保在终止该进程时释放该进程持有的所有锁,无论原因为何

  • pthread_kill不杀死线程。这个名字很混乱,但是我保证不会。它的作用是向线程发送信号,类似于`kill`函数。如果未处理信号,并且信号的默认操作是终止进程,那么**整个进程都会终止**,而不仅仅是线程。没有办法强制终止多线程程序的单个线程(缺少将其附加到调试器中并使其称为“ pthread_exit”或类似的方法)。 (3认同)