这适用于多线程场景中的异常处理场景。在需要时,在互斥锁定的某些共享资源上并行工作多个线程。如果一个线程面临异常,我可以使用sem_trywait检查是否有其他线程正在等待信号量,如果我发现某个线程正在等待信号量,将使用一个标志发生异常,我将发出一个sem_post,以便等待线程可能会等待,并在继续进行之前检查是否发生了一些异常。如果发生异常,另一个等待的线程现在将继续正常退出。请建议。 我的实际qs是:我可以使用sem_trywait吗?
答案 0 :(得分:2)
最直接的解决方案是建立一个额外的线程状态机制。信号量不是为了表明是否有人在等待它们。
在一个仅由线程写入的全局可见变量中,将其设置为 - 1
- 如果某个线程正在等待信号量,如果没有则0
。如果有人想知道线程是否想要获取信号量,请检查变量的状态。通过正确排序操作来处理变量的竞争条件不应该太困难。