我正在使用pjsip2.10搞视频电话。我发现一个问题,在向外拨打电话后,马上点击挂断,会报soft deadlock。 看了下代码挂断的时候会调用acquired_call 去循环请求锁,直到2s超时再返回错,也就是2s都没有等到锁。但是很奇怪的时,如果不是马上挂断,等几百毫秒去挂断就可以正常挂断,相同的线程,相同的操作。
之前我怀疑是因为我下发挂断线程是主线程的原因,于是我采用异步调用std::async 去挂断还是会死锁,这里的异步调用我是根本就没等他返回,而是让std::async 自己去执行,这样排除是线程互相获取锁的因素。
下面是我的日志:
出现死锁deadlock就是两个或两个以上的线程在执行过程中
由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,
若无外力作用,它们都将无法推进下去。此时处于死锁状态或系统产生了死锁
不知道