如果有人正在等待共享信号量,如何签入C Posix线程?

如果有人正在等待共享信号量,如何签入C Posix线程?,c,multithreading,semaphore,solaris-10,C,Multithreading,Semaphore,Solaris 10,这适用于多线程场景中的异常处理场景。当需要时,多个线程在互斥锁定的共享资源上并行工作。如果一个线程遇到异常,我是否可以使用sem_trywait检查其他线程是否正在等待信号量,如果我发现某个线程正在等待信号量,我将使用一个异常已发生的标志,我将发出一个sem_post,以便等待的线程可以取消连接,并在继续之前检查是否发生了异常。在异常发生的情况下,原本等待的另一个线程现在将朝着一个优雅的出口前进。请建议。 我的实际问题是:我可以使用sem_trywait吗?最简单的解决方案是设置额外的线程状态机

这适用于多线程场景中的异常处理场景。当需要时,多个线程在互斥锁定的共享资源上并行工作。如果一个线程遇到异常,我是否可以使用sem_trywait检查其他线程是否正在等待信号量,如果我发现某个线程正在等待信号量,我将使用一个异常已发生的标志,我将发出一个sem_post,以便等待的线程可以取消连接,并在继续之前检查是否发生了异常。在异常发生的情况下,原本等待的另一个线程现在将朝着一个优雅的出口前进。请建议。
我的实际问题是:我可以使用sem_trywait吗?

最简单的解决方案是设置额外的线程状态机制。信号量不是用来指示是否有人在等待它们


在仅由线程写入的全局可见变量中,如果某个线程正在等待信号量,则将其设置为
1
,如果没有,则设置为
0
。如果有人想知道线程是否想要获取信号量,请检查变量的状态。通过正确排序操作来处理竞争条件对变量进行采样应该不会太困难。

您的实际问题是什么?@ammoQ,我可以使用sem_trywait检查…?所要做的就是要么获取信号量,要么不获取信号量。它不会告诉你是否有人在等它。@wallyk如果我能在一个线程中获得信号量,这不意味着没有其他人在等吗?或者以其他方式知道?@Dr.DebasishJana如果我可以在一个线程中获得信号量,这是否意味着没有其他人在等待?这只意味着线程成功地等待了信号量。即使在该信号量上调用
sem\u post()
,成功的
sem\u trywait()
并不意味着没有其他踏板等待该信号量。