C++并发编程0——欢迎来到多线程的世界
ZeroJiu 愚昧之巅V4

在所有弱点中,最大的弱点是害怕暴露弱点。

J.B. BossuetPolitics from Holy Writ

C++11中引入了多线程编程,一般教科书中都没有涉及到这个概念,但是在工作中多线程却又是必不可少的。本文会展示最基本的Hello World, Concurrency程序。

概述

C11之后,多线程终于被支持了,C开发者再也不需要借助boost等第三方库的力量,来实现跨平台的并行编程。语言层面上的支持,能够让开发者更加专注于业务逻辑,从而减少对系统平台的关注。C11多线程的引入,让C编程更加高效和简便。

最近一直研究多线程编程,忽然有感,如果我每掌握一个知识点,便分享出来,这比我蒙头死学更加高效。如果我的使用不正确,也有机会被指出来。所以便想整理网络或者书籍上所能学到的东西,写一个教程出来,力求能让刚入门不久的C++开发者,也能轻松的掌握并发编程的奥妙。

本教程不涉及太多原理性东西,需要那些知识的可以百度,或者买本《C并发编程实战》,网路上或书籍里原理性的东西已经够多了,我想写的是让读者看完之后,能够很轻松的知道,该怎么用C的多线程机制。其中,很多内容都是来自网路或者书籍上,感谢各位大神慷慨的分享。

如果没有特殊提及,本教程的所以代码都是基于Visual Studio 2013,如果更换其他编译器有可能无法运行。

Hello World

经典的Hello World式开端。

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <thread>
void hello()
{
std::cout << "Hello world, concurrency" << std::endl;
}
int main()
{
std::thread t(hello);
t.join(); /* 没有这句话,会Debug Error的 */
return 0;
}

这段代码很简单,如果用过boost多线程编程,那么应该对这个了如指掌了。首先包含线程库头文件,然后定义一个线程对象t,线程对象负责管理以hello()函数作为初始函数的线程,join()等待线程函数执行完成——这儿是阻塞的。

这个最简单的Hello World已经包含了多线程编程的基本结构,至于线程管理、数据共享、线程同步、原子操作,以及一系列进阶操作都会在后面详细阐述。

Powered by Hexo & Theme Keep
This site is deployed on
Unique Visitor Page View