【问题标题】:How to check in C Posix thread if someone is waiting on a shared semaphore?如果有人在共享信号量上等待,如何检查 C Posix 线程?
【发布时间】:2017-05-17 08:31:42
【问题描述】:

这适用于多线程场景中的异常处理场景。多个线程在需要时在互斥下锁定的某些共享资源上并行工作。如果一个线程面临异常,我可以使用 sem_trywait 检查是否有其他线程正在等待信号量,如果我发现某个线程正在等待信号量,将使用发生异常的标志,我将发出 sem_post 以便等待线程可能会等待并检查是否发生了一些异常,然后再继续进行。如果发生异常,其他正在等待的线程现在将继续正常退出。请建议。 我的实际问题是:我可以使用 sem_trywait 吗?

【问题讨论】:

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

标签: c multithreading semaphore solaris-10


【解决方案1】:

最直接的解决方案是设置一个额外的线程状态机制。信号量并不是为了表明是否有人在等待它们。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多