Ich benutze Visual Studio 2012. Ich habe ein Modul, wo ich eine riesige Menge von Dateien von der Festplatte nach dem Durchlaufen ihrer entsprechenden Pfade durch ein XML lesen müssen. Dazu iWie sicherzustellen, dass std :: thread in Multi-Core erstellt werden?
std::vector<std::thread> m_ThreadList;
In einer while-Schleife mache ich schiebe einen neuen Thread in diesen Vektor zurück, so etwas wie
m_ThreadList.push_back(std::thread(&MyClass::Readfile, &MyClassObject, filepath,std::ref(polygon)));
Mein C++ 11 Multi-Threading Wissen ist limited.The Frage, die Ich habe hier, ist, wie erstellt man einen Thread auf einem bestimmten Kern? Ich weiß von parallel_for und parallel_for_each in vs2012, die die Kerne optimal nutzen. Aber gibt es eine Möglichkeit, dies mit Standard C++ 11 zu tun?
Die C++ - Thread-Funktionen haben keine Kenntnis von "Kernen" und daher können Sie einen Thread nicht an einen bestimmten Kern binden. –
Ich weiß es nicht wirklich, aber ich vermute ['SetThreadAffinityMask'] (http://msdn.microsoft.com/en-us/library/ms686247 (v = vs.85) .aspx) und das Handle von zurückgegeben ['std :: thread :: native_handle()'] (http://en.cppreference.com/w/cpp/thread/thread/native_handle) ist möglicherweise am ehesten verfügbar. (Aber ich stimme zu, dass es keine Möglichkeit gibt, dies rein im C++ 11 Standard zu tun, dh ohne plattformspezifische Aufrufe.) – jogojapan
Und als allgemeiner Hinweis, wenn Sie mehrere Threads verwenden, um aus mehreren Dateien auf demselben Dateisystem zu lesen Wahrscheinlich werden Sie das Programm _slower_ machen, da das Betriebssystem jedes Mal, wenn ein Threadkontextwechsel stattfindet, hin und her suchen muss. (Zumindest bei alten mechanischen Festplatten sollten moderne SSDs besser damit umgehen.) –