C++11使用标准库获取CPU物理核心数、动态创建线程

在本文中,将使用C++11标准线程库来获取CPU的物理核心数,并动态的创建和使用线程;

示例代码

#include <iostream>
#include <thread>
#include <string>

void _call(const std::string message) {

	/*
		std:cout 线程不同步/不安全
		std::cout << message << std::endl;
	*/

	printf("%s\n", message.c_str());

}

int main(int argc, char* argv[]) {

	//获取CPU核心
	int concurrency = std::thread::hardware_concurrency();

	std::cout << "hardware concurrency:" << concurrency << std::endl;

	std::thread* workers = new std::thread[concurrency];

	for (int i = 0; i < concurrency; i++) {

		std::string msg;
		msg = "id - " + std::to_string(i);

		workers[i] = std::thread(_call,msg);
	}

	for (int i = 0; i < concurrency; i++) {
		workers[i].join();
	}

	delete[] workers;

	_call("done");
}

运行效果

c++ thread

编译命令

代码保存为main.cpp

gcc -o app.exe main.cpp -lstdc++
分类: 计算机技术
推荐阅读:
MySQL ABS() 绝对值函数 ABS(x) 函数返回x的绝对值,如果x为NULL则返回NULL;
Python生成n个元素的全排列 本文将使用Python语言编写程序生成n个元素的全排列,代码不使用第三方库;
MySQL ERROR 1062错误出现原因及解决方法 当一个字段被设置成了主键(Primary Key)或唯一索引(Unique Index)时,那么该字段的数据不能重复;如果尝试插入已有数据,将产生1062错误;
Kali系统和虚拟机镜像的默认账号密码 通常,Kali的默认账号密码为 root/toor,但虚拟机镜像默认的账号密码却不一样,通常为 kali/kali;
Linux终端重用上一条命令的参数 在Linux系统下,当你想使用上一条命令所用的参数,你可以通过这一条命令实现:
使用MATLAB求函数极限 要在 MATLAB 中求解一个函数的极限,可以使用 "limit" 函数。这个函数需要两个输入参数:要求解的函数和趋近于的值。