如何使用信号量同步执行函数X和Y的3个进程?

时间:2018-12-08 20:49:08

标签: concurrency semaphore critical-section

3个进程正在同时运行 并执行X()Y() 重复

要求:

  • 最多只有 2个进程可以执行Y(),也就是说,如果最后一个进程看到 other个,则应该跳过Y()函数两个过程执行 Y()函数。

  • 当前不允许执行的进程 Y()应该仍在执行其X()函数。

  • X() 可以由所有三个进程同时执行

这是我的伪代码,使用信号量的传统 P V 操作定义,其中 ProcA ProcB和ProcC 并发

SEMVAR = 2 # Only at most 2 process may execute Y()

def ProcB():
    while True: # X() and Y() executes repeatedly
        X()
        P(SEMVAR)
        Y()
        V(SEMVAR)


def ProcC():
    while True:
        X()
        P(SEMVAR)
        Y()
        V(SEMVAR)

def ProcA():
    while True:
        X()
        P(SEMVAR)
        Y()
        V(SEMVAR)

虽然此代码只允许最多2个进程执行Y(),但它防止等待过程中执行X()的最后一个进程再次使用Y()。我只是希望它跳过Y()并在过程中 still 执行X()

0 个答案:

没有答案