LINUX.ORG.RU

История изменений

Исправление pon4ik, (текущая версия) :

Учитвая, что твой воркер держит мьютекс пока всё время пока запущенна полезная нагрузка, легко представить как твоя незатейливая диспетчеризация тупит ожидая этого мьютекса, а когда он освобождается, очередь ессно пуста.

Возможно прогресс уже шагнул далеко вперёд, но обычно, таки сам пул является очередью на кондиционной переменной, а потоки просто эту очередь разбирают, а пока нечего разбирать - спят на кондиционной переменной.

И делать join в деструкторе - не очень хорошая практика (это как минимум не очевидно).

И зачем у тебя создаётся на куче твой пул? Что бы delete лишний раз вызвать?

Ну и оно вообще всё не exception safe. У тебя останется висеть мьютекс залоченным как минимум при броске исключения из функции. Раз уж пишешь сиё на крестах мог бы и простенькое RAII заюзать.

UPD. Ещё нет защиты от спонтанных просыпаний.

Исходная версия pon4ik, :

Учитвая, что твой воркер держит мьютекс пока всё время пока запущенна полезная нагрузка, легко представить как твоя незатейливая диспетчеризация тупит ожидая этого мьютекса, а когда он освобождается, очередь ессно пуста.

Возможно прогресс уже шагнул далеко вперёд, но обычно, таки сам пул является очередью на кондиционной переменной, а потоки просто эту очередь разбирают, а пока нечего разбирать - спят на кондиционной переменной.

И делать join в деструкторе - не очень хорошая практика (это как минимум не очевидно).

И зачем у тебя создаётся на куче твой пул? Что бы delete лишний раз вызвать?

Ну и оно вообще всё не exception safe. У тебя останется висеть мьютекс залоченным как минимум при броске исключения из функции. Раз уж пишешь сиё на крестах мог бы и простенькое RAII заюзать.