Dynamic Pthread's Pool. D: Что ты хочешь? M: Написать динамический пул потоков. У меня есть готовый статический пул, однако это лишь часть моего задания. Я придумала мехнизм, однако он оказался неудачным. D: Как работает статический пул? M: По принципу Master-Slave: существует master-поток, который порождает дочерние потоки и управляет им, которые в свою очередь выполняют задания из очереди заданий. При добавлении задания основной поток оповещает об этом master-поток, который в свою очередь оповещает slave-потоки. Slave получает сигнал и выполнает задание. D: Как, по-твоему, в твоей *архитектуре* может работать динамика? M: Master, к примеру, может наблюдать за количеством свободных потоков и, в зависимости от указанных лимитов, добавлять или уничтожать потоки. D: Как наблюдать, если он блокируется в ожидании сигнала от основного потока о новом элементе? M: Не блокироваться? D: Сигналы? M: Нет, сигналы можно отправлять от _ВСЕХ_ потоков, процессов and so on. Будет неловко, если придёт сигнал от кого-то постороннего. D: Значит, нужно придумать иную стратегию наблюдения за изменением состояния очереди. К примеру, master может не смотреть за очередью, а лишь за количеством свободных потоков. M: Да, ведь нужны лишь эти данные. Но тогда следует синхронизировать дополнительно и данные проверки. Алгоритм: заходим в мьютекс, который блокирует потоки на изменение характеристик пула ( free, cur_len ), затем вызывает pool_resize.