Atu*_*tul 6 c++ concurrency multithreading c++11 visual-studio-2012
我正在使用visual studio 2012.我有一个模块,在通过xml遍历相应的路径后,我必须从硬盘中读取一大堆文件.为此我正在做
std::vector<std::thread> m_ThreadList;
Run Code Online (Sandbox Code Playgroud)
在一个while循环中,我将一个新线程推回到这个向量中,类似于
m_ThreadList.push_back(std::thread(&MyClass::Readfile, &MyClassObject, filepath,std::ref(polygon)));
Run Code Online (Sandbox Code Playgroud)
我的C++ 11多线程知识是有限的.我在这里的问题是,如何在特定核心上创建一个线程?我知道vs2012中的parallel_for和parallel_for_each,可以充分利用内核.但是,有没有办法使用标准C++ 11?
正如其他评论中所指出的,您无法“在特定核心上”创建线程,因为 C++ 不了解此类架构细节。此外,在大多数情况下,操作系统将能够很好地管理内核/处理器之间的线程分配。
也就是说,在某些情况下,强制在内核之间进行特定的线程分配可能有利于性能。例如,通过强制线程在一个特定核心上执行,可以最大限度地减少不同处理器缓存之间的数据移动(这对于某些内存限制场景中的性能至关重要)。
如果您想走这条路,您将必须研究特定于平台的例程。例如,对于具有 POSIX 线程的 GNU/linux,您将需要pthread_setaffinity_np()
在 FreeBSD 中cpuset_setaffinity()
、在 WindowsSetThreadAffinityMask()
中等。
如果您有兴趣,我这里有一些相关的代码片段:
http://gitorious.org/piranhapp0x/mainline/blobs/master/src/thread_management.cpp
归档时间: |
|
查看次数: |
8590 次 |
最近记录: |