Здравствуйте, OdesitVadim, Вы писали:
OV>Ну так это я тоже понимаю. Потоки висли на этом
OV>OV>request* dequeue()
OV> {
OV> boost::unique_lock<boost::mutex> lock (mtx);
OV> while (queue.empty())
OV> cv.wait(lock); //<======
OV> request* req = queue.front();
OV> queue.pop_front();
OV> return req;
OV> }
OV>
Условная переменная (в отличие от семафора) не несёт никакого состояния, поэтому просто выполнение broadcast() без соотв. модификации состояния не имеет смысла.
Тебе надо класть в очередь сообщение-маркер и потом делать broadcast(). Либо ждать появления сообщений в очереди ИЛИ установки какого-то, устанавливать флаг и делать broadcast().
Просто broadcast() — бессмысленная переменная, можешь считать её на no-op.