У меня следующая проблема, у меня есть 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последовательные посылки.Я не могу получить требуемую функциональность.
Обратите внимание, что это не проблема для конкретного языка, я просто пытаюсь понять, как правильно использовать семафоры для синхронизации.Есть ли более общий / математический подход для решения этой проблемы в целом?