C++多线程编程(一)

您所在的位置:网站首页 雅马哈编程软件有多少种 C++多线程编程(一)

C++多线程编程(一)

2023-03-18 04:53| 来源: 网络整理| 查看: 265

为什么要使用多线程?

(1)让软件拥有灵敏的响应;

(2)充分利用多核处理器资源,做到物尽其用;

(3)线程间的通信通过数据共享的方式更为高效;

(4)线程开销相较于进程更小:线程共享进程资源,因此创建线程时不需要再为其分配内存空间等资源,因此创建时间短,在Solaris2操作系统上,创建进程的时间大约是创建线程的30倍。线程作为基本执行单元,当从同一个进程的某个线程切换到另一个线程时,需要载入的信息比进程比进程之间切换要少,所以切换速度快,在Solaris操作系统中,线程的切换比进程切换快大约2倍。

线程的基本概念

(1) 每个进程至少有一个线程,即便在没有使用多线程技术的时候,进程也有一个主线程;

(2) 一个进程中的所有线程都是由主线程创建,线程除了共享进程的公共资源外,也有走开的私有资源,比如保存线程状态的堆栈;

(3) 进程间切换时,需要交换整个地址空间,而线程之间切换时,只是切换线程的上下文环境。

(4) 操作系统中引入线程的好处为:

a.在进程内创建、终止线程比创建、终止进程要快。

b.同一进程内线程间的切换比进程间的切换要快,尤其是用户级线程间的切换。

c.每个进程具有独立的地址空间,而该进程内的所有线程共享该地址空间,因此线程的出现可以解决父子进程模型中子进程必须复制父进程地址空间的问题。

d. 线程对解决客户/服务器模型非常有效。

(5) 满足使用多线程的几种情况:

a.应用程序中各个任务相对独立。

b.某些任务耗时较多。

c.各任务有不同的优先级。

d.一些实时系统应用。

(6) 一个进程中所有线程共享它们父进程的变量,但同时每个线程可以拥有自己的变量。

线程的几种状态

(1)就绪态:线程运行的基本条件已经满足,但是还没有拿到CPU的使用权,出现这种状态的原因一般是线程刚创建,或者是被抢占了,又或者是才从阻塞中恢复。

(2)运行态:即正在使用CPU运行的任务。

(3)阻塞态:线程主动休眠或者正在等待某种执行资源时处于该种状态。

(4)终止态:即线程结束后还没被回收时的状态,处于该状态的线程仍然可以重启,将一个线程置为终止态后我们应该及时对资源进行回收。

线程的两个要素

(1)线程函数:线程函数就是线程创建后进入运行态后要执行的函数,线程的函数可以是一个全局函数或类的静态函数。

(2)线程标识:在创建线程的时候,系统会为线程分配一个唯一的ID作为线程的标识,这个ID号从线程创建开始存在,线程结束后,该ID就自动不存在了。

线程的两种编程方式

(1)利用POSIX多线程API函数来开发多线程程序:C++11前多使用该种方式进行多线程开发,对于维护一些老项目仍然有用武之地。

(2)利用C++自带的线程类进行开发:C++11推出时出现的多线程开发方法,通过线程类实现。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3