Как заставить потоки ожидать триггера для продолжения выполнения?

Есть множество потоков 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'ах. Почитайте статьи о синхронизации потоков.

→ Ссылка