c++ 11多线程基础(一):创建和互斥量
c++11 开始多线程称为c++标准的一部分,c++11之前,不同操作系统创建线程需要不同的系统API,c++11之后只要编译器支持c11,可以编写跨平台代码。参考链接: link. link.
线程的创建
程序开始运行,此进程的主线程开始运行 当主线程从main函数返回,主线程结束。创建线程也需要从一个函数/可调用的对象开始运行。有5种线程启动的方法:
线程启动的方法
c11下需要#include头文件thread,命名空间std,启动线程
参考:启动线程.
- 通过函数指针启动
编写需要多线程执行的函数,传入函数指针和参数,构造thread对象,然后调用join()/detach() 启动
void fun(int x) {
//do something
return;
}
// 注意:如果我们创建多个线程 并不会保证哪一个先开始
int main() {
std::thread t1(fun, 10);
t1.join();
return 0;
}
- 通过lambda表达式
int main() {
// 2.Lambda函数
auto fun = [](int x) {
while (x-- > 0) {
cout << x << endl;
}
};
std::thread t1(fun, 10);
// 也可以写成下面:
std::thread t1_1([](int x) {
while (x-- > 0) {
cout << x << endl;
}
}, 11);
t1.join();
t1_1.join();
return 0;
}
- 仿函数
class Base {
public:
void operator()(int x) {
while (x-- > 0) {
cout << x << endl;
}
}
};
int main() {
thread t(Base(), 10);
t.join