此问题现象为两个进程通信失败,但是ipc消息的确发出去了,如下为在系统中的gdb堆栈信息
函数pthread_join用来等待一个线程的结束,线程间同步的操作
线程3正在销毁进程关闭,它持有一个内部GLIBC pthread互斥锁,线程3调用pthread_join()来等待另一个线程(线程2)退出。线程2退出时,它需要线程3已经持有的GLIBC pthread互斥锁;因此,线程2和线程3相互阻塞之后,发生死锁,造成IPC不通
Thread 3 (Thread 0x2b8424e30700 (LWP 1389)):
#0 0x00002b84151be49d in pthread_join (threadid=47846560868816, thread_return=0x0) at pthread_join.c:90
#1 0x00002b8425037cb4 in AlarmReporterHaObserver::~AlarmReporterHaObserver (this=<optimized out>, __in_chrg=<optimized out>)
at sw/se/xc/bsd/plat/sf/common/oam/fm/lib/alarm_reporter/alarm_reporter_api.cc:111
#2 0x0000003723e37dcf in __cxa_finalize (d=0x2b84252396c0) at cxa_finalize.c:56
#3 0x00002b8425037a61 in __do_global_dtors_aux () from /opt/ipos/lib/libalarm_reporter.so.0.0
---Type <return> to continue, or q <return> to quit---
#4 0x0000000000000000 in ?? ()
Thread 2 (Thread 0x2b84254