【C++】并发编程入门

来源:互联网 发布:java汽车租赁项目 编辑:程序博客网 时间:2024/05/16 11:14

C++11一个重要的特性就是对多线程的支持。

何谓并发

计算机领域的并发指的是在单个系统里同时执行多个独立的任务,而非顺序的进行一些活动。

并发的两种方式:

1.多核处理器,每个任务在自己核心上执行,称为硬件并发,机器能够真正的并行多个任务;
2.单核机器,通过多任务操作系统的切换功能,同时运行多个程序。机器只能在某一时刻执行一个任务,不过它每秒可以执行多次任务切换。因为任务切换的很快,以至于无法感觉任务在何时被暂时挂起,而切换到另一任务,如今仍然称这样的系统为并发,
关系:当应用在多任务切换的环境下和真正并发的环境下执行相比,行为还是有区别的。任务切换在多核处理器上仍然适用。

并发的途径

1.多进程并发——有多个 单线程的 进程
2.多线程并发——单个进程运行多个进程

为什么使用并发

1.为了分离关注点

把不同的关注点分离开来,是处理复杂性的一个原则。通过将相关的代码与无关的代码分离,可使程序更容易理解和测试;同时可使每个线程的逻辑变的更加简单。

2.为了性能

两种方式利用并发提升性能:(1)任务并行:将一个单任务分成几部分,且各自并行运行,从而降低运行总时间(2)数据并行:每个线程在不同的数据部分执行相同的操作。使用可并行的方式,来解决更大的问题。这样,处理一个数据块仍然需要相同的时间,但在相同的时间内处理了更多的数据。

C++中的并发和多线程

随着C++11标准的发布,有了一个全新的线程感知内存模型,C++标准库也扩展了:包含了用于管理线程、保护共享数据、线程间同步操作、以及低级原子操作的各种类。

hello world

/*************************************************************************    > File Name: hello.cpp    > Author: Tanswer_    > Mail: 98duxm@gmail.com    > Created Time: 2017年03月27日 星期一 20时48分51秒 ************************************************************************/#include <iostream>#include <string>#include <stack>#include <algorithm>#include <thread>  // 1using namespace std;void hello()        // 2{    cout << "hello world\n";}int main(){    thread t(hello);   // 3    t.join();          // 4     return 0;}

1.标准C++库对多线程支持的声明在新的头文件中,其中包含管理线程的函数和类在头文件中,保护共享数据的函数和类在其他头文件
2.每个线程必须具有一个初始化函数,新线程从这里开始执行
3.被命名为t的std::thread对象拥有新函数hello()作为其初始函数
4.调用线程(main()中)等待与thread对象相关联的线程结束

下篇介绍C++线程管理。

1 0