【问题标题】:Synchronization Semaphore同步信号量
【发布时间】:2018-09-25 14:08:00
【问题描述】:

我有一个父进程和三个子进程。父进程有一段代码必须在所有子进程终止后执行。我可以通过 wait() 方法来处理这个问题。它暂停父进程,直到所有子进程都终止。

但是,我必须使用同步信号量来处理这个问题。

有可能吗?

我认为我可以将信号量设置为值 0,然后将那段代码放在减少信号量值的 sem_wait() 函数之后。由于其值等于 0,因此该函数挂起父信号量。之后,当每个子进程完成其工作时,它会调用sem_signal() 方法,将信号量的值加一。这个解决方案有问题:

当三个子进程之一将 syn semaphore 的值加 1 时,父进程可以继续执行其代码,因为它的值不再等于 0。

如何使用信号量让父进程等待所有子进程?

【问题讨论】:

    标签: synchronization semaphore


    【解决方案1】:

    我认为这不能用一个信号量来完成。为此目的使用了屏障。您可以尝试implement 屏障或对程序中的所有特定角色使用信号量。

    设置你的信号量:

    subprocesses_run = Semaphore(3) # means that 3 processes can hold this semaphore
    sub1_exit = Semaphore(1) # works like normal mutex
    sub2_exit = Semaphore(1)
    sub3_exit = Semaphore(1)
    

    父进程:

    sub1_exit.wait()
    sub2_exit.wait()
    sub3_exit.wait()
    
    # Do your code
    
    subprocesses_run.signal() # signal for all 3 waiting processes
    subprocesses_run.signal()
    subprocesses_run.signal()
    

    第一个子进程:

    subprocesses_run.wait()
    
    # Some code here
    
    sub1_exit.signal()
    

    在这个概念中,所有进程都应该循环运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多