从今天开始跟着github上Cplusplus-Concurrency-In-Practice学习C++并发编程,过程中顺带学习C++11,每天做点学习记录。
- 示例代码如下,参考C++并发编程实战:
#include <iostream>
#include <thread>
using namespace std;
void task() {
cout << "hello" << endl;
}
int main() {
thread t(task);
t.join();
return 0;
}
1. thread这里使用的构造函数原型是
template <class F, class ...Args> explicit thread(F&& f, Args&& ...args);
f这里是task,args使用的可变参数模板,这里没有参数;
2. join()方法是thread的成员函数,表示阻塞当前线程,直至 *this (调用线程)所标识的线程完成其执行。*this 所标识的线程的完成同步于从 join() 的成功返回。
- 使用makefile编译,makefile如下:
all: Thread
CC=g++
CPPFLAGS=-Wall -std=c++11 -ggdb
#LDFLAGS=-pthread
Thread: Thread.o
$(CC) $(LDFLAGS) -o $@ $^
Thread.o: Thread.cc
#$(CC) $(CPPFLAGS) -o $@ -c $^
$(CC) -o $@ -c $^
.PHONY:
clean
clean:
rm Thread.o Thread
1. make默认缺省规则是makefile中的第一个规则,一般第一个规则称为all,依赖文件是多个可执行程序;每次执行时,检查all是否需要更新,从而会检查依赖的可执行文件是否需要更新;
2. $@表示目标文件,$^表示所有依赖文件,-c表示只经过预处理、编译、汇编生成目标文件.o,并不链接;
3. .PHONY后面的target是一个伪造的target,不是真实文件,所以当makefile当前目录下存在同名文件时,依然能执行后面的规则。详细可参考 makefile .PHONY作用 makefile .PHONY使用
4. gcc4.6环境下编译时需要加pthread,否则执行报错,我的是5.4.0,因此没加。