如何在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)中是否有更优雅的方法来实现这一点?也许有某种标准函数或库可以抽象