博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++11 并发指南一(C++11 多线程初探)
阅读量:6441 次
发布时间:2019-06-23

本文共 2954 字,大约阅读时间需要 9 分钟。

引言

C++11 自2011年发布以来已经快两年了,之前一直没怎么关注,直到最近几个月才看了一些 C++11 的新特性,今后几篇博客我都会写一些关于 C++11 的特性,算是记录一下自己学到的东西吧,和大家共勉。

相信 Linux 程序员都用过 Pthread, 但有了 C++11 的 std::thread 以后,你可以在语言层面编写多线程程序了,直接的好处就是多线程程序的可移植性得到了很大的提高,所以作为一名 C++ 程序员,熟悉 C++11 的多线程编程方式还是很有益处的。

如果你对 C++11 不太熟悉,建议先看看维基百科上关于 C++11 新特性的介绍,, ,另外C++之父 的关于 也是必看的,我也收集了一些关于C++11的资料,供大家查阅:

资料汇

C++0x/C++11 Support in GCC:

What is C++0x:

Overview of the New C++

Overview of the New C++ (C++0x).pdf:

A Brief Look at C++0x

Summary of C++11 Feature Availability in gcc and MSVC:

C++ 11: Come Closer:

C++11 threads, locks and condition variables:

Move Semantics and Perfect Forwarding in C++11:

C++11 Concurrency:

The Biggest Changes in C++11:

Ten C++11 Features Every C++ Developer Should Use:

 C++11 – A Glance [part 1 of n]:

 C++11 – A Glance [part 2 of n]:

C++11(及现代C++风格)和快速迭代式开发:

Lambda Functions in C++11 - the Definitive Guide:

Better types in C++11 - nullptr, enum classes (strongly typed enumerations) and cstdint:

Rvalue-references-and-move-semantics-in-c++11:

Multi-threading in C++0x:

C++ 0X feature summary cheat sheat:

Multithreading in C++0x part 1: Starting Threads:

好了,下面来说正题吧 ;-)

与 C++11 多线程相关的头文件

C++11 新标准中引入了四个头文件来支持多线程编程,他们分别是<atomic> ,<thread>,<mutex>,<condition_variable>和<future>。

  • <atomic>:该头文主要声明了两个类, std::atomic 和 std::atomic_flag,另外还声明了一套 C 风格的原子类型和与 C 兼容的原子操作的函数。
  • <thread>:该头文件主要声明了 std::thread 类,另外 std::this_thread 命名空间也在该头文件中。
  • <mutex>:该头文件主要声明了与互斥量(mutex)相关的类,包括 std::mutex 系列类,std::lock_guard, std::unique_lock, 以及其他的类型和函数。
  • <condition_variable>:该头文件主要声明了与条件变量相关的类,包括 std::condition_variable 和 std::condition_variable_any。
  • <future>:该头文件主要声明了 std::promise, std::package_task 两个 Provider 类,以及 std::future 和 std::shared_future 两个 Future 类,另外还有一些与之相关的类型和函数,std::async() 函数就声明在此头文件中。

std::thread "Hello world"

下面是一个最简单的使用 std::thread 类的例子:

#include 
#include
#include
// std::cout#include
// std::threadvoid thread_task() { std::cout << "hello thread" << std::endl;}/* * === FUNCTION ========================================================= * Name: main * Description: program entry routine. * ======================================================================== */int main(int argc, const char *argv[]){ std::thread t(thread_task); t.join(); return EXIT_SUCCESS;} /* ---------- end of function main ---------- */

Makefile 如下:

all:ThreadCC=g++CPPFLAGS=-Wall -std=c++11 -ggdbLDFLAGS=-pthreadThread:Thread.o    $(CC) $(LDFLAGS) -o $@ $^Thread.o:Thread.cc    $(CC) $(CPPFLAGS) -o $@ -c $^.PHONY:    cleanclean:    rm Thread.o Thread

注意在 Linux GCC4.6 环境下,编译时需要加 -pthread,否则执行时会出现:

$ ./Threadterminate called after throwing an instance of 'std::system_error'  what():  Operation not permittedAborted (core dumped)

原因是 GCC 默认没有加载 pthread 库,据说在后续的版本中可以不用在编译时添加 -pthread 选项。

更多的有关 C++11 Concurrency 的介绍将在后续的一系列博客中写出,希望自己勤快一点吧 ;-)

转载于:https://www.cnblogs.com/haippy/p/3235560.html

你可能感兴趣的文章
linux常用命令之压缩及解压
查看>>
collect2: ld returned 1 exit status
查看>>
泛型的概述
查看>>
TWaver矢量小试——Android演进路线图
查看>>
华为手机真机调试设置
查看>>
http 小爬虫
查看>>
“工欲善其事,必先利其器”——UC浏览器研发中实用测试工具
查看>>
字符串转double算法
查看>>
seleect io模型的select操作封装
查看>>
记一次使用dockerfile安装debian并安装好vim,netstat等工具
查看>>
【LeetCode】141 Linked List Cycle (java实现)
查看>>
动态设置软键盘打开会关闭
查看>>
便携式能源设备
查看>>
云盘发展方向研究和总结
查看>>
xcodebuild和xcrun自动化编译ipa包 笔记
查看>>
Spring 的启动过程
查看>>
livereload的使用
查看>>
js判断页面值是否被改变
查看>>
【Linux 系统编程】常用的一些基本命令
查看>>
VUE实现的一个简单分页表格
查看>>