接着上一篇的继续写
上一篇链接:https://blog.csdn.net/zuimman/article/details/121520790?spm=1001.2014.3001.5501
4多线程
c++11之前的多线程和并发是通过第三方库来实现的,c++11之后引进了thread类,可以直接进行多线程和并发实现。
多线程的类是thread类,其成员函数join函数,可以启动线程运行。
但是并发最大的问题就是多个线程共享进程的内存空间,这就会导致争抢数据的情况,因此c++11,引入了原子数据类型:atomic t;
这就保证了并发数据不会出错和冲突。
#include<atomic>
#include<thread>
#include<iostream>
using namespace std;
atomic_int total {0};
void func(int){
for(int i=0;i<10;i++){
total+=i;}
}
int main(){
thread t1(func,0);
thread t2(func,0);
t1.join();
t2.join();
cout<<total<<endl;
return 0;
}
5.lambda函数
lambda表达式的格式:capture mutable ->type{statement}
其中capture是捕捉列表,就是捕捉变量的意思。parameters是参数,对比于一般函数里面的参数,mutalble是修饰符,->return-type
是返回类型。{statement}是函数体。
#include<iostream>
using namespace std;
int main() {
int girls = 1, boys = 4;
auto sum = [](int x, int y)->int {return x + y; };
cout << "两个数的和为:";
cout<<sum(girls, boys);
return 0;
}
补充:命名空间,为什么一般不推荐使用using namespace space,是因为这个会把命名空间space的所有名字都引入,容易发生命名空间污染。