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;
}
以上内容均为学习笔记