有3个进程同时执行 X()Y() 重复执行 .

要求:

  • 只有最多2个进程可以执行 Y() ,也就是说,当它看到另外两个进程正在执行 Y() 函数时,最后一个进程应跳过 Y() 函数 .

  • 当前不允许执行 Y() 的进程仍应执行 X() 函数 .

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

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

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() ,但它会阻止最后一个进程在等待再次使用 Y() 时执行 X() . 我只是想让它跳过 Y() 并在此过程中仍然执行 X() .