Здравствуйте, Selavi, Вы писали:
S>>>Заметьте, что моей реализации, которую все обос*али вышеописанных проблем нет) EP>>Там есть проблемы покруче, например: EP>>* одно и то же задание может выполнится несколько раз, так как не учитываются spurious wakeup. EP>>* выполнение не заданного задания (segfault). EP>>* отсутствие join для CThreadPoolX, в результате std::terminate. S>Да, Вы правы...вот черт( Наконец то хороший анализ!
А до этого что, плохие были? Люди потратили своё время, посмотрели код, даже если тебе обидно — постарайся сдерживать эмоции.
S>А не могли бы подробней про 2 и 3?
2. Рассмотри ситуацию когда рабочий поток создался, не получил ни одного задания, а потом разрушился. В этом случае поток проснётся и попробует выполнять this->task, который указывает в никуда.
3. Управляющий поток CThreadPoolX создаётся, но нигде ни join'ится, ни detach'ится. В таком случае деструктор std::thread сделает std::terminate.
Наверняка есть ещё подобные проблемы, но дальше не смотрел.