《c++》线程篇——线程知识

fusio / 2023-05-06 / 原文

什么是线程?

参考链接:https://blog.csdn.net/weixin_51182368/article/details/125799573
参考链接:https://www.cnblogs.com/qianqiannian/p/7010909.html

并发与并行

最初的程序是由上至下依次执行,现在想要一个程序一边唱歌一边跳舞,如何设计?
由此引入“并发和并行”的概念

并发:多个事件同一时间段内发生。(伪同时)
并行:多个事件同一时刻发生。(真同时)

所以,对于一边唱歌一边跳舞,就有并发或并行两种方式。

进程与线程

进程,进程是分配资源的最小单位。一个进程由一个或多个线程组成。
线程:线程是程序执行的最小单位。同进程中不同线程共享资源。

一个程序可以运行多个进程,而进程是程序的一次执行过程。这句话的个人理解:以英雄联盟为例,当你启动客户端进入游戏时,使用任务管理器,找到英雄联盟的进程,英雄联盟的进程会有多个,每个进程占独立的内存和cpu,这个就是进程的概念。即一个程序(英雄联盟)可以启多个进程,每个进程间资源独立。也就是说进程是程序的一次执行过程。

同步和互斥
同步,是指进程(或线程)按照顺序依次执行。
互斥,是指对某一资源同时只允许一个进程对它访问,具有唯一性和排它性。

多线程的应用

临界区资源

在WIN32中,同步机制主要有以下几种:
(1)事件(Event);
(2)信号量(semaphore);
(3)互斥量(mutex);
(4)临界区(Critical section)。

InitializeCriticalSection(&Critical);               //初始化临界区对象
hEvent = CreateEvent(NULL, FALSE, TRUE, "event");
hSemaphore = CreateSemaphore(NULL, 1, 100, "sema");
hMutex = CreateMutex(NULL, false, "mutex");             //创建互斥对象

1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。
2、互斥量:为协调共同对一个共享资源的单独访问而设计的。
3、信号量:为控制一个具有有限数量用户资源而设计。
4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。