[基础]多线程有关概念
[基础]多线程相关概念
同时性:指两个或两个以上事件在同一时刻发生。
并发性:指两个或两个以上事件在同一时间间隔发生。
进程是操作系统资源分配的单位。
线程是操作系统执行的单位。同一进程中的两段代码不能同时执行,除非引入线程。
为什么要引入线程?
进程与进程之间的通信时十分慢的(网络编程)。因为进程管理分配很多资源,所以转换起来很慢,就这样线程产生了,它是比进程更小的单位。一个进程中只要有一个或多个线程,每个线程之间的通信相对进程而言,则快了很多,因为线程只涉及到CPU的资源分配。一个进程里的线程是可以相互通信的,但不同的进程之间的线程是不能相互通信的。
线程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大的提高了程序的执行效率。
线程的优点
线程在程序中的作用:提供程序的并发性。常用在网络通信,处理前后台,处理异步的情况下。
只有在多个CPU的计算机上,多个线程才能够真正的同时运行。然而,操作系统把CPU的时间分成很短的时间片分配给每个线程,这样给人的感觉好像是多个线程真的同时在运行
线程同步
多线程编程的核心就是线程同步。线程同步是指线程之间在相互通信时避免破坏各自数据的能力。也就是对于共享资源,一个线程在某一段时间内是多了占有的。它是由操作系统分配CPU时间片的分配方式引起的。虽然在某一时刻,只有一个线程占有CPU(单CPU)时间,但是没有办法知道在什么时候,在什么地方线程被打断,这样如何保证线程之间不破坏彼此之间的数据就显的格外重要了。
线程间的同步方法大体分两类:用户模式(临界区(CriticalSection))和内核模式(事件(Event),信号量(Semaphore),互斥量(Mutex))。
线程互斥:是在对于共享的进程系统资源,在各单个线程访问时的排他性。是一种特殊的线程同步。
小demo
#include <windows.h> #include <iostream> using namespace std; int iData=0; DWORD WINAPI ThreadFun(LPVOID lParam) { int num=(int)lParam; for (int i=0;i<num;i++) { iData=iData++; cout<<iData<<endl; } return 0; } int main() { for (int i=5;i<7;i++) { CreateThread(NULL,0,ThreadFun,(LPVOID)i,0,NULL); } system("pause"); return 0; }
结果