【问题标题】:Unix process synchronization without pthreads/sempahores, signals?没有 pthreads/sempahores、信号的 Unix 进程同步?
【发布时间】:2010-10-26 04:44:51
【问题描述】:

我正在尝试编写一个不使用 pthread 或信号量库的程序。我想与信号进行一些同步。我在几本 Unix 书籍中读到过它们,但我还是不太明白。我写了一些模拟程序设计/代码,这不是我的程序,但它让我了解了我如何尝试组织流程/信号。这似乎是一个合理的解决方案?

程序流程:

Main fork 随机次数,并在每个子节点中执行“程序”。程序为孩子分配一个值,1 或 2(例如输入或输出等)。

我想要一种方法来同步这些孩子。我认为使用信号是可能的,从我读到的内容中,我想做类似的事情:

如果孩子 == 1,则发送父(主)SIGUSR1,否则如果孩子 == 2,则发送父(主)SIGUSR2。当父级为信号提供服务时,则结束。

现在回到 main 我想组织这些传入的信号。我一次只接受一种类型,所以如果一个孩子向我发送 SIGUSR1,我将阻止所有 SIGUSR2,或者如果一个孩子先向我发送 SIGUSR2,那么我将阻止所有 SIGUSR1。 Main 将接收信号并服务该类型的所有信号,直到不再有该类型的信号,然后它将检查/取消阻止其他类型并服务任何该类型(如果存在),否则 main 将等待更多信号。

这似乎是对信号的正确使用,甚至可以通过信号实现吗?

谢谢!

【问题讨论】:

  • 如果要排队信号,请务必使用sigqueue(2)
  • 谢谢,我会阅读更多相关信息!

标签: unix synchronization signals


【解决方案1】:

你没有说为什么你想使用信号。您只是想弄清楚信号是如何工作的吗?

这看起来像是对信号的正确使用吗?甚至可以通过信号实现吗?

我不会考虑您提出的那种带有信号的设计。你没有说孩子们在做什么,但我可能会使用管道、套接字或消息队列。

如果你能添加一些关于你的高层次目标的信息,我也许可以为你提供更好的方向。

【讨论】:

  • 我希望了解信号的工作原理。通过解决一些经典的死锁问题,我了解了信号量/pthreads 是如何进行同步的。我正计划尝试解决信号的一些死锁问题。我想到的问题是单车道桥梁问题。在这种情况下,我会尝试将一个信号用作北车,将一个信号用作南车。我一次只会为一个方向解锁桥梁(主要)并在服务另一端之前处理交通(请求)。我不确定这是否甚至可以通过信号实现,但从我对信号的阅读看来是这样
  • 可能,也许——作为学术练习。但是信号不是我解决这个问题的首选。对于这个问题,信号可能是我最后的选择。但除了最基本的 IPC 之外,我对信号有任何偏见,可能是因为不得不修复严重依赖信号使用的可怕设计,而其他东西更合适。
  • 谢谢,我想我会试一试学术练习。如果您想到任何可能有帮助的地方,请告诉我,再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 2015-04-13
  • 2016-08-04
相关资源
最近更新 更多