[基础]多线程有关概念

[基础]多线程相关概念

同时性:指两个或两个以上事件在同一时刻发生。

并发性:指两个或两个以上事件在同一时间间隔发生。

进程是操作系统资源分配的单位。

线程是操作系统执行的单位。同一进程中的两段代码不能同时执行,除非引入线程。

为什么要引入线程?

进程与进程之间的通信时十分慢的(网络编程)。因为进程管理分配很多资源,所以转换起来很慢,就这样线程产生了,它是比进程更小的单位。一个进程中只要有一个或多个线程,每个线程之间的通信相对进程而言,则快了很多,因为线程只涉及到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;
}

结果

[基础]多线程有关概念