Я хочу один раз дождаться результатов нескольких других потоков. Подходящей конструкцией будет std::latch - ожидающая использует wait() производитель count_down(), но я хочу иметь возможность определять тайм-аут, поэтому мне нужен wait_for функциональность. К сожалению, в std::latch нет wait_for. Ну, std::semaphore есть, но обычно std::semaphore используется в обратной логике. Было бы удобно, если бы я мог использовать отрицательное значение инициализации, но даже это знаковый тип (
) это запрещено - предварительное условие: желательно >= 0.
- может решить все задачи синхронизации, но... нет wait_for.
Похоже, мне нужно создать собственную защелку с помощью std::condition_variable и std::mutex.
Но мне нравится понимать, почему некоторые конструкции предлагают функциональность таймаута (семафор, мьютекс, условное условие), а другие (защелка, барьер, атомное ожидание) — нет — есть ли причина или просто потому что?
Подробнее здесь:
https://stackoverflow.com/questions/792 ... y-wait-for