C++标准线程库之入门

本文介绍了C++11引入的标准线程库,包括std::thread的基本使用、线程并发数、子线程创建与等待、参数传递、线程类封装以及可能的扩展。强调了使用std::ref传递引用参数的重要性,并通过示例展示了线程安全问题。
摘要由CSDN通过智能技术生成

自c++11版本后,标准库也提供了对线程的支持。虽然大多场合还是使用其他的三方线程库,如:boost::thread, QThread等,但是学习下还是有必要的。

1. std::thread简介

std::thread类即创建子线程的类,定义于头文件thread中。

std::thread类仅不到十个公开成员函数,同时无法进行拷贝,只能使用移动构造和赋值转移所有权。

2. CPU支持的线程并发数

#include <thread>
[static]
unsigned int std::thread::hardware_concurrency();
// 返回硬件支持的线程数目,失败返回0
#include <iostream>
#include <thread>

int main()
{
   
    std::cout << "CPU是" << std::thread::hardware_concurrency() << "线程" << std::endl;
    return 0;
}

3. 创建子线程

#include <thread>
[public]
template<typename _Callable, typename... _Args>
std::thread::thread(_Callable&& __f, _Args&&... __args);
// 构造函数之一, 传一个可以调用的函数或者对象作为任务, 有子线程来处理运行这个任务。
// 未调用此构造函数的线程是无法执行的,称为空任务线程。
// 需要明确的是构造完成后,子线程即开始执行,而不是等join(结合)或者detach(分离)调用才执行

bool std::thread::joinable() const;
// 未被结合或者分离的非空任务线程会返回true, 否则返回false。

std::thread::id std::thread::get_id() const;
// 未被结合或者分离的非空任务线程会返回非0的整数作为子线程的标识符
#include <iostream>
#include <thread>

void func(int a)
{
   
    std::cout << "This function is callable: " << a << std::endl;
}

class callable_obj
{
   
public:
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值