目录

多线程

        1.并发

        2.进程

        3.线程

        4.并发实现

            4.1:多进程实现并发

            4.2:单线程,多线程实现并发

        5.c++中的多线程

简单的多线程示例代码:


多线程

        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;
}
07-03 09:16