从逻辑上看来,两个进程之间这样是没问题的,不应该导致死锁。
有没有这样的可能:tShortTimer负载太重,以至于有时候不能在10ms内完成,新的中断又来了,导致自己挂在自己上面。这个时候tShortTimer无法释放mutex,导致两个进程都挂在mutex2上?
我觉得可以如下调试试试看:
1), 将tShortTimer中工作屏蔽掉,只是semTake后semGive,看会不会出现类似错误。
2), 将tlongtimer中A和B的工作屏蔽掉,只是semTake后semGive,看会不会出现类似错误
3), 将tlongtimer和tShortTimer中的工作都屏蔽掉,只是semTake后semGive,看会不会出现类似错误
4), 如果能确定是tLongTimer或tShortTimer引起的,在慢慢往里面回复以前的操作,反复实验,这样应该能找出问题来。