Как сделать повышение:: thread_group выполняют постоянное число параллельных потоков

Это - код, чтобы создать thread_group и выполнить все потоки параллельно:

boost::thread_group group;
for (int i = 0; i < 15; ++i)
    group.create_thread(aFunctionToExecute);
group.join_all();

Этот код выполнит все потоки сразу. То, что я хочу сделать, должно выполнить их всех кроме 4 максимумов параллельно. Когда на завершается, другой выполняется, пока нет, чтобы больше не выполниться.

13
задан 27 July 2010 в 13:20
поделиться

2 ответа

Другим, более эффективным решением может быть обратный вызов каждого потока к основному потоку, когда они завершаются, а обработчик на основном потоке может запускать новый поток каждый раз. Это предотвратит повторные вызовы timed_join, поскольку основной поток не будет ничего делать, пока не сработает обратный вызов.

3
ответ дан 2 December 2019 в 02:17
поделиться

У меня есть что-то вроде этого:

    boost::mutex mutex_;
    boost::condition_variable condition_;
    const size_t throttle_;
    size_t size_;
    bool wait_;
    template <typename Env, class F>
    void eval_(const Env &env, const F &f) {
        {   
            boost::unique_lock<boost::mutex> lock(mutex_);
            size_ = std::min(size_+1, throttle_);
            while (throttle_ <= size_) condition_.wait(lock);
        }
        f.eval(env);
        {
            boost::lock_guard<boost::mutex> lock(mutex_);
            --size_; 
        }
        condition_.notify_one();
    }
0
ответ дан 2 December 2019 в 02:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: