Как синхронизировать 3 процесса, выполняющих функции X и Y, используя семафор? - PullRequest
0 голосов
/ 08 декабря 2018

Есть 3 процесса , работающих одновременно , выполняющих X() и Y() несколько раз .

Требования:

  • Только самое большее 2 процесс может выполнить Y(), то есть последний процесс должен пропустить функцию 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() и все еще выполнить X() в процессе.

...