https://www.gravatar.com/avatar/932f1b40c8d0202ce03a0df412bfb0ff?s=240&d=mp

chaomai's Odyssey

C++ Concurrency in Action (2) - Managing threads

Managing threads

std::thread:线程管理的相关类和函数。

对于那些不是那么简单的任务,库提供了可以让你从基本的代码来构建你需要的东西的灵活性。

Basic thread management

每个C++程序都至少有一个线程,这个线程是由C++运行时启动的:运行main()的那个线程。

C++ Concurrency in Action (1) - Hello, world of concurrency in C++!

关于此系列文章

最近在看这本书,这个系列文章是我在看书过程中的笔记,记录了一些我觉得关键的地方和自己的思考。如果能帮助到你,I will be very happy :).

关于C++ Concurrency in Action

{% blockquote 并发编程网 http://ifeve.com/c-plus-plus-concurrency-in-action/ 《C++ Concurrency in Action》中文版 %} 本书是一本基于C++11新标准的并发和多线程编程深度指南。从std::thread、std::mutex、std::future和std::async等基础类的使用,到内存模型和原子操作、基于锁和无锁数据结构的构建,再扩展到并行算法、线程管理,最后还介绍了多线程代码的测试工作。本书的附录部分还对C++11新语言特性中与多线程相关的项目进行了简要的介绍,并提供了C++11线程库的完整参考。 {% endblockquote %}

Clang++中C++11 thread的支持

问题

在Ubuntu中使用Clang++,

1
clang++-3.7 -std=c++11 test.cpp

编译C++11编写的多线程代码时,

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <iostream>
#include <thread>

void f()
{
  std::cout << "Hello World\n";
}

int main()
{
  std::thread t(f);
  t.join();
}

发现如下问题:

编译时,-pthread and -lpthread的区别

-pthread告诉编译器,要链接到pthread库,同时配置线程的编译。

下面的例子就显示了在使用-pthread时,定义了不同的宏。

1
2
3
4
5
6
7
$ gcc -pthread -E -dM test.c > dm.pthread.txt
$ gcc          -E -dM test.c > dm.nopthread.txt
$ diff dm.pthread.txt dm.nopthread.txt
152d151
< #define _REENTRANT 1
208d206
< #define __USE_REENTRANT 1

-lpthread只会告诉编译器,要链接到pthread库,但是这些宏不会被定义。

从汇编的角度分析C++引用

引用

C++中,引用为对象起了另外一个名字,引用类型refers to另外一种类型。定义引用时,把引用和初始值绑定在一起,而不是将初始值拷贝给引用。定义了引用之后,对其进行的所有操作都是在与之绑定的对象上进行的。但是引用本身不是一个对象。