Как заставить потоки ожидать триггера для продолжения выполнения?
Есть множество потоков T1, ..., Tn. Все они выполняют функцию F, состоящую из инструкций f1, f2, f3. Как реализовать условие:
Потоки должны ожидать после выполнения инструкции
f2до тех пор, пока каждый поток не выполнит инструкциюf2.
Т.е. условие все потоки выполнили f2 должно разрешить каждому потоку выполняться дальше. Как это сделать?
На конкретном примере:
import threading
import random
import time
THREAD_COUNT = 5
def thread_func():
str_to_print = f"{threading.current_thread()} {random.random()}"
time.sleep(random.random() * 2)
# Ждать, пока все потоки дойдут до сюда
print(str_to_print)
def main():
threads = [threading.Thread(target=thread_func) for _ in range(THREAD_COUNT)]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
if __name__ == "__main__":
main()
Ответы (1 шт):
Автор решения: Shamus Rezol
→ Ссылка
Видно, вы не знаете о существовании замочков? Я говорю о threading.(R)Lock'ах. Почитайте статьи о синхронизации потоков.