Конструкции синхронизации std — логика, лежащая в основе wait() и try_wait_for()C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Конструкции синхронизации std — логика, лежащая в основе wait() и try_wait_for()

Сообщение Anonymous »

Я хочу один раз дождаться результатов нескольких других потоков. Подходящей конструкцией будет std::latch - ожидающая использует wait() производитель count_down(), но я хочу иметь возможность определять тайм-аут, поэтому мне нужен wait_for функциональность. К сожалению, в std::latch нет wait_for. Ну, std::semaphore есть, но обычно std::semaphore используется в обратной логике. Было бы удобно, если бы я мог использовать отрицательное значение инициализации, но даже это знаковый тип (

Код: Выделить всё

ptrdiff_t
) это запрещено - предварительное условие: желательно >= 0.

Код: Выделить всё

std::atomic wait()
- может решить все задачи синхронизации, но... нет wait_for.
Похоже, мне нужно создать собственную защелку с помощью std::condition_variable и std::mutex.
Но мне нравится понимать, почему некоторые конструкции предлагают функциональность таймаута (семафор, мьютекс, условное условие), а другие (защелка, барьер, атомное ожидание) — нет — есть ли причина или просто потому что?

Подробнее здесь: https://stackoverflow.com/questions/792 ... y-wait-for
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»