Avatar ·

如何在C++中以编程方式确定CPU核心数(跨平台解决方案)?

大家好!我正在用C++编写一个多线程图像处理应用程序。我希望程序能根据用户的硬件自动确定最佳线程数。问题在于,它需要在Windows和Linux上都能运行。 我尝试过使用宏和系统API调用,但结果变得非常混乱: ```cpp #ifdef _WIN32 SYSTEM_INFO sysinfo; GetSystemInfo(&sysinfo); int cores = sysinfo.dwNumberOfProcessors; #elif __linux__ int cores = sysconf(_SC_NPROCESSORS_ONLN); #else int cores = 1; // fallback #endif ``` 这段代码能工作,但看起来非常糟糕。另外,我了解到在某些支持Hyper-Threading的处理器上,`dwNumberOfProcessors` 返回的是逻辑核心数,而不是物理核心数。而我需要的是物理核心数,以避免创建过多线程导致缓存过载。 在现代C++(C++11/14/17)中是否有更优雅的方法来实现这一点?也许有某种标准函数或库可以抽象