Прошу прощения, если этот вопрос уже задан.
Можно ли очистить условную переменную, которая уже установлена?
Подробности о том, что я хочу достичь ниже:Сброс условной переменной (boost)
void worker_thread {
while (wait_for_conditional_variable_execute) {
// process data here
// Inform main thread that the data got processed
// Clear the conditional variable 'execute'
}
}
Обратите внимание, что нить работник должен обрабатывать данные только один раз, и он должен ждать, пока основной поток, чтобы установить «выполнить» условную переменную снова
Я также думал о том, как флаг ниже
void worker_thread {
while (wait_for_conditional_variable_execute) {
if (flag) { flag = 0; }
// process data here. The `flag` will be set by main thread
}
}
но я имею в виду, что это будет ресурсоемкие, так как это не что иное, опросом флага. Разве это не так?
Я пропустил упоминание нескольких деталей, таких как _1. Я не могу создавать новый поток каждый раз после завершения задания. 2. Есть 100s потоков для управления, следовательно, опрос флага не будет принимаемым_ – boomerang
Просто чтобы уточнить, как вы отметили это с помощью [tag: boost-thread], могу ли я предположить, что вы используете версию от C++ ниже C++ 11 и, таким образом, используют 'boost :: thread' и' boost :: condition_variable'? – Tas
@ Тас, да .. я использую C++ ... просто FYI, мне еще предстоит решить между 'boost :: thread' или' QThread' (поскольку это проект QT). Но я бы определенно использовал 'boost :: condition_variable'. – boomerang