Я использую visual studio 2012. У меня есть модуль, где мне нужно прочитать огромный набор файлов с жесткого диска после прохождения их соответствующих путей через xml. Для этого я делаюКак обеспечить, чтобы std :: thread были созданы в многоядерном?
std::vector<std::thread> m_ThreadList;
В цикле, пока я отодвигая новую нить в этот вектор, что-то вроде
m_ThreadList.push_back(std::thread(&MyClass::Readfile, &MyClassObject, filepath,std::ref(polygon)));
My C++ 11 мульти знаний заправочного является limited.The вопроса У меня есть, есть, как создать поток на конкретном ядре? Я знаю о parallel_for и parallel_for_each в vs2012, которые оптимально используют ядра. Но есть ли способ сделать это, используя стандартный C++ 11?
Функции потока C++ не знают о «ядрах», и поэтому вы не можете привязать поток к определенному ядру. –
Я действительно не знаю, но я угадываю ['SetThreadAffinityMask'] (http://msdn.microsoft.com/en-us/library/ms686247 (v = vs.85) .aspx) и дескриптор, возвращаемый ['std :: thread :: native_handle()'] (http://en.cppreference.com/w/cpp/thread/thread/native_handle) может быть самым близким к вам. (Но я согласен с тем, что это невозможно сделать в рамках стандарта C++ 11, то есть без вызовов, специфичных для конкретной платформы.) – jogojapan
И как общий совет, если вы используете несколько потоков для чтения из нескольких файлов в одной и той же файловой системе , вы, скорее всего, сделаете программу _slower_ из-за того, что операционная система должна искать туда и обратно каждый раз, когда есть контекстный переключатель потока. (По крайней мере, на старых механических жестких дисках, современные твердотельные накопители должны справиться с этим лучше.) –