C++11thread类

 C++11新标准中引入五个头文件支持多线程编程,分别:

<thread>

<atomic>

<mutex>

<condition_variable>

<future>

 

 

<thread>头文件

(1)该头文件声明了 std::thread类。

(2)std::this_thread命名空间也在该头文件中。

 

<atomic>头文件

(1)该头文件主要声明了 std::atomic 和 std::atomic_flag 两个类。

(2)还声明了C风格的原子类型和与C兼容的源自操作的函数。

 

<mutex>头文件

(1)该头文件主要声明了互斥量(mutex)相关类。

(2)包括std::mutex系列类、std::lock_guard类,std::unique_lock类等。

 

<condition_variable>头文件

(1)该头文件主要声明与条件变量相关的类。

(2)包括std::condition_variable和std::condition_variable_any两个类。

 

<future>头文件

该文件主要声明了:

Futures类:std::future,shared_future.

Provides类:std::primise,std::package_task.

Providers函数: std::async().

其他类型:std::future_error,std::future_errc,std::future_status,std::launch.

 

 

std::thread头文件

#include<thread>

using namespace std;

 

thread 构造函数

class thread

{

public:

     thread() noexcept = default;

     thread(thread&) = delete;    //被禁用

     thread(const thread&) = delete;

     thread(thread&&_t)noexcept;

     template<typename_Callable,typename..._Args>explicit thread(_Callable&&_f,_Args&&..._args);

}

 

thread 构造函数

template<class Fn, class...Args>explicit thread(Fn&&fn, Args&&...args);

 

fn:    函数类型

args:参数列表

 

 

get_id成员函数

id   get_id() const noexcept;   

获取线程id.

 

join成员函数

void join();

当该线程执行完成后才返回。

即:等待子线程执行完毕才继续执行主线程。

类似于WaitForSingleObject();

 

 

joinable成员函数

bool joinable();

检查线程是否可被join。

 

 

detach成员函数

void detach();

(1)将本线程从调用线程中分离出来,允许本线程独立执行,thread对象失去对它的关联

(2)当主进程结束的时候,即便是detach出去的子线程不管有没有完成都会被强制杀死

 

备注:

(1)我们需要再线程对象被销毁前调用join或detach方法。

(2)如果要detach,通常再线程启动后就立即调用detach方法。

(3)如果再线程开始之后,调用join之前发生了异常,则可能跳过对join的调用。

(4)为了避免应用程序再引发异常的时候被终止,你需要异常时也调用join。

 

 

#include<thread>
#include<iostream>
 
using namespace std;


int  threadFun(string &str);


int main()
{
	//默认构造函数
	thread t1;
	cout << t1.get_id() << endl;   //线程id 为0
	cout << t1.joinable() << endl;  //判断线程是否能够被join,为0,不能。
	
	//带参构造函数
	thread t2(threadFun, string("hello"));
	cout << t2.get_id() << endl;   //线程id
	cout << t2.joinable() << endl;  //判断是否能够被join

	//相当于waitForSingleObject 
	//一直等待线程结束,也可以用detach分离线程结束。
	//thread对象再销毁之前必须调用join 否则程序终止。
	//t2.join();
	t2.detach();
	system("pause");
	return 0;
}

int threadFun(string &str)
{
	cout << str.c_str() << endl;
	return 0;
}

 

以上内容均为学习笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值