simply_user: Потому что wait без предиката именно так и спроектирован - пробуждаться по сигналу. Причем в этой перегрузке так же возможны "случайные пробуждения". И по правилам хорошего тона, следует проверять дополнительное условие, чтобы удостоверится, что пробуждение не случайное. Для этого и ввели перегрузку wait с предикатом, но в этой перегрузке, пошли ты хоть 100500 notify_all(), блокировка не снимется, пока предикат не вернет true. И опять же, пока предикат == true и был послан сигнал, блокировки не будет. Как только предикат == false и нет сигналов, блокировка возобновиться.
simply_user: Да, notify_one() или notify_all() работает как "спусковой крючок". Далее проверяется предикат и пока он == true, блокировки нет. Вообще, более разумно либо сделать локальную копию dataProcessing и отчистить его со снятием блокировки, либо организовать цикл по этому контейнеру с обработкой элементов, а после обработки, опять таки, отчистить его и снять блокировку.