目录
多线程
1.并发
两个或多个独立活动同时发生(一个程序执行多个独立任务)
举例:吃饭和上厕所,是独立的事情,但是可以一起干:一边蹲厕所一边吃饭
并发假象:单核CPU通过上下文的方式实现进程的并发
2.进程
计算机中的程序关于数据集合上的一次运行活动
举例:任务管理器就是一个个的进程,比如任务管理器中的VS左边有一个小箭头,打开后,可以看到下面还有一个个的进程【一个软件一般都是多进程程序】
3.线程
每个进程都有一个且唯一的主线程,每一个进程只有一个主线程
线程:就是一个代码的运行通道
4.并发实现
4.1:多进程实现并发
主要解决问题:进程间的通信问题
同一台电脑上行,主要提供过管道,文件,消息队列,内存共享实现
不同电脑主要通过网络编程实现
4.2:单线程,多线程实现并发
一个进程中所有线程共享内存空间的方式去实现
主要是资源竞争问题
例子:一个宿舍,一个厕所,有一个人去上厕所了,总不能让另一个人一起进来上吧,所以要给门上锁
5.c++中的多线程
5.1:#include <thread> 包含thread库
5.2:创建线程,需要一个线程处理函数
5.3:创建线程后未做任何处理,会调用abort函数终止程序
5.4:join()函数:加入/汇合线程,阻塞主线程【子线程没完成,会等待子线程完成】
5.5:detach()函数:分离,驻留后台
例子:主线程1秒执行完成,子线程3秒执行完成,如果使用detach(),主线程做完结束了,子线程还没有完成则无法打印出字符
5.6:对于同一个线程,join()函数和detach()函数只能做一次【不能做两次】
5.7:joinable()函数:判断当前线程是否可以被join和detach,可以返回true,不可以返回false。
简单的多线程示例代码:
#include <iostream>
#include <thread>
#include <windows.h>
using namespace std;
void mainPrint();
void otherPrint();
int main()
{
thread t1(otherPrint);//创建另一个线程执行otherPrint打印函数
if (t1.joinable())//判断该线程是否可以被join和detach
{
t1.detach();//可以则执行另一个线程 【detach()函数:分离执行】
}
mainPrint();//打印主线程函数
return 0;
}
void mainPrint()
{
cout << "主线程" << endl;
}
void otherPrint()
{
Sleep(1000);
cout << "其他线程" << endl;
}