Сообщение Re[2]: condition_variable.notify_all от 20.07.2020 11:56
Изменено 20.07.2020 11:57 Barbar1an
Re[2]: condition_variable.notify_all
Здравствуйте, qaz77, Вы писали:
Q>Здравствуйте, Barbar1an, Вы писали:
B>>я так и не понял из доков, если notify_all вызван до того как ожидатель вызвал wait , то что мы получим?
B>>дедлок?
B>>если дедлок то что это за фуфло такое? на чистом винапи можно легко избежать этой проблемы, потому что там если эвент устанорвлен, то Wait не будет ждать.
Q>То, что евент установлен, за это отвечает состояние этого объекта — некий bool, условно говоря.
Q>С условной переменной функции ожидания проверяют предикат. Если там проверяется какой-то bool, то будет как с виндовым эвентом.
Q>wait увидит true и не будет ждать. notify_one/notify_all только выполняют пробуждение ждущих потоков, чтобы те смогли проверить свои предикаты.
Q>В условной переменной можно использовать и более сложные состояния, опрос которых при вызове предиката защищен мьютексом.
Q>Например, аналог WaitForMultipleObjects можно сделать из условной переменной и массива bool.
да , но меня напрягает что для тривиальной задачи "подождать пока чтото закончится", мне нужно иметь ТРИ переменые: мутекс, кондишн и чтото для предиката
хотя это можно сделать одним винапишным событием
Q>Здравствуйте, Barbar1an, Вы писали:
B>>я так и не понял из доков, если notify_all вызван до того как ожидатель вызвал wait , то что мы получим?
B>>дедлок?
B>>если дедлок то что это за фуфло такое? на чистом винапи можно легко избежать этой проблемы, потому что там если эвент устанорвлен, то Wait не будет ждать.
Q>То, что евент установлен, за это отвечает состояние этого объекта — некий bool, условно говоря.
Q>С условной переменной функции ожидания проверяют предикат. Если там проверяется какой-то bool, то будет как с виндовым эвентом.
Q>wait увидит true и не будет ждать. notify_one/notify_all только выполняют пробуждение ждущих потоков, чтобы те смогли проверить свои предикаты.
Q>В условной переменной можно использовать и более сложные состояния, опрос которых при вызове предиката защищен мьютексом.
Q>Например, аналог WaitForMultipleObjects можно сделать из условной переменной и массива bool.
да , но меня напрягает что для тривиальной задачи "подождать пока чтото закончится", мне нужно иметь ТРИ переменые: мутекс, кондишн и чтото для предиката
хотя это можно сделать одним винапишным событием
Re[2]: condition_variable.notify_all
Здравствуйте, qaz77, Вы писали:
Q>Здравствуйте, Barbar1an, Вы писали:
B>>я так и не понял из доков, если notify_all вызван до того как ожидатель вызвал wait , то что мы получим?
B>>дедлок?
B>>если дедлок то что это за фуфло такое? на чистом винапи можно легко избежать этой проблемы, потому что там если эвент устанорвлен, то Wait не будет ждать.
Q>То, что евент установлен, за это отвечает состояние этого объекта — некий bool, условно говоря.
Q>С условной переменной функции ожидания проверяют предикат. Если там проверяется какой-то bool, то будет как с виндовым эвентом.
Q>wait увидит true и не будет ждать. notify_one/notify_all только выполняют пробуждение ждущих потоков, чтобы те смогли проверить свои предикаты.
Q>В условной переменной можно использовать и более сложные состояния, опрос которых при вызове предиката защищен мьютексом.
Q>Например, аналог WaitForMultipleObjects можно сделать из условной переменной и массива bool.
да , но меня напрягает что для тривиальной задачи "подождать пока чтото закончится", мне нужно иметь ТРИ переменые: мутекс, кондишн и чтото для предиката
хотя это можно сделать одним винапишным Event'ом
Q>Здравствуйте, Barbar1an, Вы писали:
B>>я так и не понял из доков, если notify_all вызван до того как ожидатель вызвал wait , то что мы получим?
B>>дедлок?
B>>если дедлок то что это за фуфло такое? на чистом винапи можно легко избежать этой проблемы, потому что там если эвент устанорвлен, то Wait не будет ждать.
Q>То, что евент установлен, за это отвечает состояние этого объекта — некий bool, условно говоря.
Q>С условной переменной функции ожидания проверяют предикат. Если там проверяется какой-то bool, то будет как с виндовым эвентом.
Q>wait увидит true и не будет ждать. notify_one/notify_all только выполняют пробуждение ждущих потоков, чтобы те смогли проверить свои предикаты.
Q>В условной переменной можно использовать и более сложные состояния, опрос которых при вызове предиката защищен мьютексом.
Q>Например, аналог WaitForMultipleObjects можно сделать из условной переменной и массива bool.
да , но меня напрягает что для тривиальной задачи "подождать пока чтото закончится", мне нужно иметь ТРИ переменые: мутекс, кондишн и чтото для предиката
хотя это можно сделать одним винапишным Event'ом