之前一直想看一下多线程编程,但是迟迟没有去动手,直到之前参加一个比赛,碰见相关内容,这次无意间在网易云课堂上发现这个课程,这个系列的博客就当作自己学习的笔记,作为自己的再次巩固.废话不多说,直接上学习记录.
并发编程包括两种方式,分别是多线程编程和多进程编程.多进程中,每一个进程都只有一个线程,进程间通信方式有文件,管道,消息队列等.另一种并发模型就是多线程,即一个进程中两个或两个以上的线程,线程之间采用共享内存来进行通信.
二者之间的区别:
线程的优点:一个线程启动速度快(相比而言,进程则需要操作系统分配一系列内部资源来管理,所以线程被认为时轻量级的).线程开销更低(操作系统需要对进程进行很多的保护,并且线程的通信方式更快).
线程缺点:难于管理.且不能在分布式环境中运行.
现在直接进入代码,代码运行环境是ubuntu 16.04.
#include <thread>
#include <iostream>
using namespace std;
void function_1()//子线程
{
cout << "Hello world!" << endl;
}
int main(int argc, char** argv)//主线程
{
std::thread t1(function_1);
t1.join();//用于阻塞主线程
return 0;
}
编译的时候指令为
g++ main.cpp -std=c++11 -pthread
join()函数会阻塞主线程,就上面这个例程而言,只有执行完function_1(),main()线程才会结束,当然了也存在一个函数detach(),即将t1.join()改为t1.detach(),则不会阻塞主线程了,此时可能function_1()函数还没有执行就已经被扼杀在摇篮里了.
另外视频中还提及在线程进行detach()后,就不能在进行join()了,所以为了避免这个错误,我们可以在join()一个线程的时候,可以先进行判断,即
if(t1.joinable())
{
t1.join();
}