C++11多线程(1)
C++11中添加了duox多线程类,编写C++程序可以直接使用C++11中的多线程库,不必依赖于平台多线程,这样可以方便写出夸平台的多线程程序。多线程可以最大化利用计算机资源,提高代码的运行效率。
C++11中thread类提供两个成员函数,join()和detach()函数。这两个函数用来启动创建的线程。但是两者zhij之间存在区别:join()启动的线程会阻塞主线程,当子线程运行结束后才会运行主线程。相比之下detach()函数是启动zixi子线程,并且让子线程和主线程进行分离,子线程和主线程各运行各的,在代码层次上,两个线程并不存在谁阻塞谁,很可能主线程已经运行结束了子线程还在运行。
使用join()启动线程
#include <iostream>
#include <thread> //1
using namespace std;
//2
void SonThread()
{
cout << "子线程开始" << endl;
cout << "子线程退出"<<endl;
}
int main()
{
thread demo(SonThread); //3
demo.join(); //4
cout << "主线程运行结束" << endl;
system("Pause");
return 0;
}
创建多线程过程:
1、包含头文件#include<thread>
2、创建线程函数
3、创建线程对象
4、启动线程
使用detach()创建线程
#include <iostream>
#include <thread> //1
using namespace std;
//2
void SonThread()
{
cout << "子线程开始" << endl;
cout << "子线程退出"<<endl;
}
int main()
{
thread demo(SonThread); //3
demo.detach(); //4
cout << "主线程运行结束" << endl;
system("Pause");
return 0;
}
从上面的执行结果可以看出,join()启动的线程将主线程阻塞;detach()启动的线程不会阻塞主线程,主线程与子线程会无序执行,直至程序执行完毕。
启动线程时,join()与detach()只能使用一个函数,使用了其中一个就不能使用另一个,有一个重要的函数可以进行判断,joinable()函数,如果已经使用了join()或detach()那么joinable()返回false,否则返回true。
#include <iostream>
#include <thread> //1
using namespace std;
//2
void SonThread()
{
cout << "子线程开始" << endl;
cout << "子线程退出"<<endl;
}
int main()
{
thread demo(SonThread); //3
demo.join(); //4
if (!demo.joinable())
{
cout << "demo不准再启动" << endl;
}
cout << "主线程运行结束" << endl;
system("Pause");
return 0;
}