Синхронизация двух потоков отправителя и получателя - PullRequest
0 голосов
/ 19 мая 2018

У меня следующая проблема, у меня есть 2 отправителя, которые отправляют одного за другим, и только после того, как 2 из них отправили сообщение, я хочу, чтобы получатель начал получать, а затем ждать следующих двух отправок, например S1 S2Rec S1 S2 Rec ...

semOne = threading.Semaphore(value = 1)
semTwo = threading.Semaphore(value = 0)
semRecNotify = threading.Semaphore(value = 0)

def senderOne():
    while True:
        semOne.acquire()
        print("Sender One")
        semTwo.release()

def senderTwo():
    while True:
        semTwo.acquire()
        print("Sender Two")
        semOne.release()
        semRecNotify.release()

def receiver():
    while True:
        semRecNotify.acquire()
        print("Receiver")  

Используя semOne и semTwo, мне удалось синхронизировать 2 отправителей и используя semRecNotify Я попытался (безуспешно) убедиться, что мы входим в получатель только после 2последовательные посылки.Я не могу получить требуемую функциональность.

Обратите внимание, что это не проблема для конкретного языка, я просто пытаюсь понять, как правильно использовать семафоры для синхронизации.Есть ли более общий / математический подход для решения этой проблемы в целом?

...