C++ 11并发介绍

注:本文内容摘自:《C++并发编程实战》——Anthony Williams著  周全等译

自己将其中的精华内容摘抄出来,做以笔记,加深印象与理解!


1.1何谓并发:

最简单和最基本的并发,是指两个或更多独立的活动同时发生。

1.1.1 计算机系统中的并发:

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

1.1.2并发的表现:

         单核处理器:通过任务调度(切换)实现伪并发

         多核处理器:通过硬件支持达到真正的并发效果(单个芯片,内嵌多个处理器)

 

1.2 使用并发的原因:

         1、关注点分离

         2、提高性能

1.2.1利用并发提高性能的两种方式:

1、任务并行(*taskparallelism*)or数据并行(*data parallelism*):

         任务并行是将一个单个任务分成几部分,且各自并行运行,从而降低总运行时间。

数据并行是每个线程在不同的数据部分上执行相同的操作;

2、使用可用的并发方式来解决更大的问题。

1.2.3 什么时候不使用并发

         收益<成本

         成本:

1、  编写、维护方面的脑力成本;

2、  复杂性可能会引来的更多的错误;

3、  性能增益可能会小于预期;

4、  线程占用堆栈空间,所以运行太多的线程也会耗尽进程的可用内存或地址空间。对于一个可用地址空间为4GB(32bit)的平坦架构的进程来说,如果每个线程都有一个1MB的堆栈(很多系统都会这样分配),那么4096个线程将会用尽所有地址空间,不会给代码、静态数据或者堆数据留有任何空间。

5、  运行越多的线程,操作系统就需要做越多的上下文切换,每个上下文切换都需要耗费本可以花在有价值工作上的时间。

 

1.3在c++中使用并发:

1.3.1 RAII(Resource Acquisition IsInitialization)-资源获得即初始化:

         许多C++类库(如:MFC、Boost、ACE等c++通用类库)共有的,同时也是为程序员提供很大便利的特别重要的一种设计,用来确保退出相关作用域的时候互斥元被解锁。

1.3.2 C++11新标准的变化:

         1、对并发的支持;

         2、编程语言自身的改善;

         3、全面的原子操作库;

         4、更高级别的抽象和工具…

 

1.4一个简单的C++并发例子:

#include"stdafx.h"

#include<iostream>

#include<thread>

void hello(){

    std::cout<< "Hello World";

}

int main()//原始线程

{

    std::threadt(hello);//新的线程t,并制定该线程的入口函数为hello

    t.join();

    return 0;

}

几点解释:

1、<thread>:用于管理线程的函数和类的头文件

2、main()函数:整个应用程序的入口函数,也是初始线程(调用线程:main线程在代码中调用新线程,如调用std::thread t(hello););

3、std::thread t(hello):main函数中新创建的线程;

4、hello()函数:每一个线程必须有一个初始函数,该初始函数即使t线程的初始函数

5、t.jion():这个语句的执行将会导致调用线程(在main()函数中)等待与std::thread对象相关联的线程,即该例子中的t线程。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值