多线程:基本概念

来源:互联网 发布:笔记本电脑咋下载软件 编辑:程序博客网 时间:2024/05/24 06:53

基本概念

C++ 11 开始支持了多线程。

并发

在计算机科学中指单个系统里同时执行多个独立的任务,而并非顺序的执行活动。也就是说多个任务同时执行,而不是一个执行完了之后接着执行下一个。在以前,大多计算机只有一个处理器,因此也就只含有单个处理单元,在这种处理器中每个时刻只能执行一个任务,但是可以通过任务切换,也就是说在在这种情况中宏观上是多个任务并行执行的但在处理器这个微观角度上仍是顺序执行的。对于现在的多核处理器来说,是能够真正地执行并发的,在不同的核中可以运行不同的任务。

多进程并发

将程序分为多个独立的进程(单线程),让其在同一个时刻运行。进程间可以通过信号、套接字、文件、管道等进行通信。

缺点:通信速度有点慢;需要额外的开销来管理多个进程。

优点:可以远程连接在不同的机器上独立运行进程。

多线程并发

在单个进程中运行多个线程。线程相互独立的运行,且线程可以在不同的指令序列中运行。同一个进程中的线程共享地址空间也就是共享所属进程的资源。

缺点:缺少线程间数据的保护。

优点:多线程的开销小于多进程的开销。

简单的多线程程序

//简单的hello world 程序#include<iostream> int main(){   std::cout<<"hello world!"; return  0;}
//线程版的hello world程序#include<iostream>#include<thread>//支持多线程的头文件 void hello(){     std::cout<<"hello world! <thread_run>";}int main (){   std::thread t(hello);//启用线程hello()   t.join();//防止main执行完而hello未执行   return 0;}
在线程版的hello world 程序中,启用了一个新的线程hello(), 有别于原有的线程main()。在main线程执行过程中启动hello线程,这两个线程都独立运行。可能发生一种情况就是main线程完成了而hello线程却没有开始,因此需要一定的方法使得程序运行合理。


原创粉丝点击