История изменений
Исправление pon4ik, (текущая версия) :
Учитвая, что твой воркер держит мьютекс пока всё время пока запущенна полезная нагрузка, легко представить как твоя незатейливая диспетчеризация тупит ожидая этого мьютекса, а когда он освобождается, очередь ессно пуста.
Возможно прогресс уже шагнул далеко вперёд, но обычно, таки сам пул является очередью на кондиционной переменной, а потоки просто эту очередь разбирают, а пока нечего разбирать - спят на кондиционной переменной.
И делать join в деструкторе - не очень хорошая практика (это как минимум не очевидно).
И зачем у тебя создаётся на куче твой пул? Что бы delete лишний раз вызвать?
Ну и оно вообще всё не exception safe. У тебя останется висеть мьютекс залоченным как минимум при броске исключения из функции. Раз уж пишешь сиё на крестах мог бы и простенькое RAII заюзать.
UPD. Ещё нет защиты от спонтанных просыпаний.
Исходная версия pon4ik, :
Учитвая, что твой воркер держит мьютекс пока всё время пока запущенна полезная нагрузка, легко представить как твоя незатейливая диспетчеризация тупит ожидая этого мьютекса, а когда он освобождается, очередь ессно пуста.
Возможно прогресс уже шагнул далеко вперёд, но обычно, таки сам пул является очередью на кондиционной переменной, а потоки просто эту очередь разбирают, а пока нечего разбирать - спят на кондиционной переменной.
И делать join в деструкторе - не очень хорошая практика (это как минимум не очевидно).
И зачем у тебя создаётся на куче твой пул? Что бы delete лишний раз вызвать?
Ну и оно вообще всё не exception safe. У тебя останется висеть мьютекс залоченным как минимум при броске исключения из функции. Раз уж пишешь сиё на крестах мог бы и простенькое RAII заюзать.