zoukankan      html  css  js  c++  java
  • C++11多线程编程(一)——初始多线程

    首先还是那个问题,我们为什么需要多线程?单线程编程做的好好的,又简单又好用,为什么要弄出一个多线程编程呢?难道前人是为了设计而设计了个多线程的?显然这是不可能,那么是什么原因呢?用最精炼的语言概括无非就是以下两个原因。

    效率和用户体验

    效率主要体现在服务端,用户体验更多是体现在客户端,当然肯定不是说效率只体现在服务端,用户体验只体现在客户端,无论是效率还是用户体验在服务端和客户端上都会体现,只是说侧重点不一样,这一点大家要注意下。

    那么多线程到底是什么呢?在计算机术语中也可以叫并发,指的是在单个系统里同时执行多个独立的活动,而不是顺序的一个接一个的执行。假设这样的一个场景,你在一个软件中要导入100万条的数据,如果你用单线程,那么你在导入的过程中,你只能等待它导完,其他什么事你都做不了,因为软件会卡在那里,之所以卡在那里,是因为软件里面在传输数据,而你是用单线程,数据还没传输完,下面的代码无法执行。所以这个时候你必须用多线程,开启一个线程来导入这100万条数据,这样才能保证在导入数据的同时,你还可以在软件上做其他操作。

    大家要注意一点,在单核CPU上面,并发并不是真正的并发,而是通过时间片轮询的方式来看起来像是并发,真正的并发应该是在多核CPU上面。

    说完了多线程的相关概念,我们来说一说多线程编程。在早期C++11之前,C++在语言级别上并不支持多线程,要想实现多线程,必须通过第三方库或者调用平台系统函数来实现的,而不同平台的多线程的系统函数又都不一样,所以给多线程编程带来了很多麻烦。但是从C++11开始,C++终于开始在语言级别上支持多线程,我们也终于可以用一份代码在多个平台上跑了。

    那么C++如何实现线程呢?以下是一个实现线程的简单的例子

    #include <iostream>
    #include <thread>
    using namespace std;
    
    void thread_task()
    {
        cout << "hello thread" << endl;
    }
    
    int main()
    {
        thread t(thread_task);
        t.join();
        cout << "thread end" << endl;
        return 0;
    }

    thread t(thread_task)这个是打开C++多线程世界的一个最简单也是最基础的一行代码,从此C++开始从语言级别上支持了多线程。

    以上是一个非常简单的C++多线程的例子,main函数是主线程,thread_task是子线程,thread t(thread_task)意思是启动这个子线程,join()会使主线程会被阻塞,直到子线程执行完毕,然后才退程序。

    所以从这个例子大家可以看出C++多线程写法是多么的简洁,让人充满的学习的欲望。

    更多精彩内容,请关注同名公众:一点月光(alittle-moon)

  • 相关阅读:
    特性(Attribute)
    泛型
    AngularJS 基础用法
    js date相关学习!
    android 数据存储分配的一些事
    angularjs model.service vs provider vs factory?
    angularJS 判断
    zepto.js 学习之(一)
    angularJS Directive学习
    AngularJS继续中
  • 原文地址:https://www.cnblogs.com/kiwiblog/p/14088075.html
Copyright © 2011-2022 走看看