2012-03-27 2 views
22

Gibt es etwas wie boost::thread_group in C++ 11?boost :: thread_group in C++ 11?

Ich versuche nur, mein Programm von boost:thread zu C++ 11 Threads portieren und konnte nichts Entsprechendes finden.

+4

Boost-Threads und 11 ++ C Themen sind unterschiedlich. Ich persönlich benutze weiterhin Boost-Threads wegen der vollständigeren API (und der fehlenden aktuellen Implementierung von zB lokalem Thread-Speicher). –

Antwort

24

Nein, es gibt nichts, was in C++ 11 boost::thread_group direkt entspricht. Sie können eine std::vector<std::thread> verwenden, wenn alles, was Sie wollen, ein Container ist. Sie können dann entweder die neue for-Syntax oder std::for_each verwenden, um join() für jedes Element oder was auch immer aufzurufen.

+4

Seit 2012 gibt es eine bessere Lösung für dieses Problem? – pyCthon

+1

Ich möchte hinzufügen, dass es wirklich keine Magie in "boost :: thread_group" gibt, es ist ein wenig mehr als ein Vektor von Threads (das "kleine mehr" sind einige Dienstprogrammfunktionen wie 'join_all' und' create_thread'). –

5

thread_group hat es nicht in C++ 11 und C++ 14 Standards geschafft.

Aber eine Abhilfe ist einfach:

std::vector<std::thread> grp; 

    // to create threads 
    grp.emplace_back(functor); // pass in the argument of std::thread() 

    void join_all() { 
    for (auto& thread : grp) 
     if (thread.joinable()) 
     thread.join(); 
    }