NO.1、什么是并发:
两个或多个独立活动的任务同时发生(一个程序执行多个独立的任务)
1.1、并发假象:
单核CPU通过上下文的方式实现进程并发
NO.2、什么是进程:
计算机中的程序关于数据集合上的一次活动(比如计算机任务管理的软件进程)
NO.3、什么是线程:
每个进程都有一个主线程,并且主线程是唯一的,每个进程只有一个线程
3.1、线程:
就是一个完整的代码运行通道
NO.4、并发实现:
4.1,多个进程实现并发(不在主要研究范围):
主要解决进程间通信问题:
同一台电脑上运行,主要提供管道,文件,消息队列,内存共享实现,不同电脑主要网络编程实现
4.2,单进程,多个线程实现并发(主要研究对象):
一个进程中所有线程共享内存控间的方式
NO.5、C++中的多线程头文件:
#include<thread>
5.1、用thread()创建线程,用join()线程处理函数 [join():是加入(汇合)线程,阻塞主线程]
5.2、用detach():分离,驻留后台。(使用会导致一些问题,慎用)
5.3、对同一个线程detach()和join()只能用一次,不能二次被是使用
5.4、针对于detach()和join()被使用、提供joinable()进行判断,以防在写很多代码时,对函数处理
NO.6、案例分析:
6.1、如果printData()函数加入延时Sleep(5000) ,主线程main()被阻塞等待延结束,才执行print()函数
6.2、如果使用detach()分离,主线程main()没有等待printData()函数的延结束,而执行print()函数,printData()被遗留在后台
#include<thread>
#include<iostream>
#include <Windows.h>
using namespace std;
using namespace this_thread;
void print()
{
cout << "干活..." << endl;
}
void printData()
{
Sleep(5000);
cout << "睡觉..." << endl;
}
int main()
{
thread t1(printData);
if(t1.joinable())
// t1.join();
t1.detach();
print();
return 0;
}