我有两个过程(pr。1和pr。2)。我想依次运行它们(1、2、1、2,...,1、2)。我正在尝试使用SYSV信号量来做到这一点。我创建两个充满和空的信号灯(设置为full = 0和empty = 1)。比我更改它们以切换流程。一切正常,但是结局有问题(当其中一个过程结束其工作并死亡时)。
我希望他们彼此等待,所以在semop中使用SEM_UNDO标志(而不是IPC_NOWAIT)。但是,如果公关。 1死后,SEM_UNDO返回它更改的所有值,因此,满和空将得到错误的值(取决于pr。1运行多少次)。公关2感到困惑,无法正常工作。
我该如何克服这个问题?这是否意味着在某些过程中使用SEM_UNDO时,我们不应该立即更改信号量值(否则,我们将遇到问题)?