Параллельность потоков c++

У меня есть std::queue и, допустим, 4 std::thread. Я хочу, чтоб каждый поток брал себе из очереди задачу (назову элемент так) и далее производил с ним действия, которые приведут к добавлению в эту же очередь новых задач. Проблема вот в чём: изначально у меня в очереди лежит одна единственная задача, а потока 4. Также есть проверка на непустую очередь, чтобы в конце потоки завершились. Происходит такая ситуация, потоки все дружно проходят проверку на непустую очередь, далее лок. Первый поток берёт единственную задачу из очереди и удаляет её оттуда, после этого анлок и выполнение задачи. Второй поток уже пытается работать с пустой очередью (есть проверка что очередь всё-таки опустела после предыдущего). И вот на этом моменте я хочу, чтоб поток подождал, когда в очереди появятся новые задачи (их туда добавит первый поток). Возможно ли это как-то реализовать? Убедительная просьба не писать комментарии или ответы из категории "фигню придумал, делай по-другому", я на данном этапе хочу попробовать реализовать свою идею, спасибо. Если на словах не очень понятно, то вот код:

void A::worker() {
    while (!_queue.empty()) {//очередь - поле класса А с одной записью внутри (изначально)
        cs.lock();
        if (_queue.empty()) {
            continue;
        }
        auto a = _queue.front().str;
        auto b = _queue.front().depth;
        _queue.pop();
        cs.unlock();
        maker(a, b);//внутри есть добавление задач в очередь, push() залочен
    }
}

//инициализация потоков
void А::threaders() {
    for (unsigned i = 1; i <= _threads_count; ++i){
        _threads.emplace_back(std::thread(&А::worker, this));
    }
    for (auto& i : _threads){
        i.join();
    }
}

Ответы (0 шт):