QNX4.25多线程信号灯死锁

各个线程使用的所有信号灯初始化为全局变量,初始值为1。为了防止某一线程在没有释放信号灯时异常退出引起信号灯死锁,在等信号灯时,如果10秒没有等到,都会调用sem_post()主动释放信号灯,然后调用sem_trywait(),如果释放几次后还没有等到,就sem_wait()。结果程序运行时,有时会发生多个线程间的死锁,处于SEM态。
会是程序在长时间没有等待信号灯时,主动调用sem_post()引起的死锁吗?是不是这样使用信号灯违反了QNX信号灯的使用规则?
极度困惑,请大家指教。