C\C++獲取系統中CPU核數


轉自:https://blog.csdn.net/hanxv_1987/article/details/79521102

 

  在進行多進程/線程編程時,為了盡可能提高進程/線程的運行效率,需要依據機器的cpu核心數來動態的創建進程/線程。那么如何獲取cpu的核心數呢?

  Window下獲取cpu核心數:

  windows系統中提供SYSTEM_INFO結構體來保存當前系統的配置信息,通過GetSystemInfo來獲取:

1 #include "windows.h"
2 SYSTEM_INFO sysInfo;
3 GetSystemInfo( &sysInfo );
4 printf("now system cpu num is %d\n",sysInfo.dwNumberOfProcessors);

  Linux下獲取cpu核心數:

  linux下可以通過linux系統提供的sysconf()來獲取當前CPU個數,sysconf在頭文件unistd.h中聲明。

  原型:long sysconf (int name);
  sysconf函數中輸入參數_SC_NPROCESSORS_CONF和_SC_NPROCESSORS_ONLN均可以獲取系統CPU個數。
  _SC_NPROCESSORS_CONF:返回系統所有的CPU核數,這個值也包括系統中禁止用戶使用的CPU個數;
  _SC_NPROCESSORS_ONLN:返回系統中可用的CPU核數;

1 #include "unistd.h"
2 printf("system cpu num is %d\n", sysconf( _SC_NPROCESSORS_CONF));
3 printf("system enable cpu num is %d\n", sysconf(_SC_NPROCESSORS_ONLN));

  GNU C Library也提供了一種獲取CPU個數的方法:

  get_nprocs_conf()和get_nprocs()函數可以用來獲取系統CPU個數,在頭文件“sys/sysinfo.h”中聲明。
  get_nprocs_conf():與sysconf( _SC_NPROCESSORS_CONF)作用相同,獲取當前系統所有的CPU核數;
  get_nprocs():與sysconf( _SC_NPROCESSORS_ONLN)作用相同,獲取當前系統用戶可以使用的CPU核數。

1 #include "sys/sysinfo.h"
2 printf("system cpu num is %d\n", get_nprocs_conf());
3 printf("system enable num is %d\n", get_nprocs());

  在編寫多線程代碼時,可以在多線程代碼執行前去查詢並打印當前系統可用CPU核數,當該代碼執行速度變慢時可以查詢打印的log來確定CPU核數作為輔助分析。

 

  跨平台獲取cpu核心數:

  通過系統內置宏來進行跨平台代碼移植。

 1 #ifndef __linux__
 2 #include "windows.h"
 3 #else
 4 #include "unistd.h"
 5 #include "sys/sysinfo.h"
 6 #endif
 7 
 8 #ifndef __linux__
 9 SYSTEM_INFO sysInfo;
10 GetSystemInfo( &sysInfo );
11 printf("system cpu num is %d\n", sysInfo.dwNumberOfProcessors);
12 #else
13 printf("system cpu num is %d \n", sysconf(_SC_NPROCS_CONF));
14 printf("system enable num is %d\n", sysconf(_SC_NPROCS_ONLN));
15 
16 //GNU way
17 printf("system cpu num is %d\n", get_nprocs_conf());
18 printf("system enable num is %d\n", get_nprocs());
19 #endif

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM