导航
1.了解并行与并发的概念
2.了解进程和线程
3.浅显的进行传参,调用
——————————————————————————————————————
多线程程序包含可以同时运行的两个或多个部分。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。
基于进程和基于线程:
基于进程的多任务处理是程序的并发执行。
基于线程的多任务处理是同一程序的片段的并发执行。
头文件#include < thread>
1.了解并行与并发的概念:
并行:两个或多个事件在同一时刻发生(同时发生)
并发:两个或多个事件在同一时间段发生
2.了解进程和线程:
进程:正在运行的程序,比如你打开了qq和微信就是两个进程
线程:进程内部的执行单元,比如谷歌浏览器打开了多个页面
多线程:多个线程并发执行
1个进程可以包含多个线程
创建线程,获取线程的id号:
#include <iostream> #include <thread> using namespace std; void func() { //this_thread::get_id 获取线程的id cout<<"this is my thread,thread is"<<this_thread::get_id<<endl; } int main() { thread th = thread(func); th.join(); //用来等待被创建线程的结束,并回收它的资源 cout<<"this is main thread,this thread is"<<this_thread::get_id<<endl; system("pause"); return 0; }
也可以进行传参:
#include <iostream> #include <thread> #include <string> using namespace std; void func(string s) { //this_thread::get_id 获取线程的id cout<<"this is my thread,thread is "<<s<<endl; } int main() { thread th = thread(func,"c++"); //将传入的参数放入其中 th.join(); //用来等待被创建线程的结束,并回收它的资源 cout<<"this is main thread"<<endl; system("pause"); return 0; }
如果传的是引用的话:
#include <iostream> #include <thread> #include <string> using namespace std; void func(string& s) { cout<<(&s)<<endl; //打印下地址 cout<<"this is my thread,thread is "<<s<<endl; } int main() { string ss = "c++"; thread th = thread(func,std::ref(ss)); //后面传参数也要规范 th.join(); //用来等待被创建线程的结束,并回收它的资源 cout<<"this is main thread"<<endl; cout<<(&ss)<<endl; system("pause"); return 0; }
运行:
——————————————————————————————————————
可以传多个参数:
#include <iostream> #include <thread> using namespace std; void func(int a,int b) { cout<<a+b<<endl; } int main() { thread th = thread(func,1,2); //后面可以传多个参数 th.join(); //用来等待被创建线程的结束,并回收它的资源 system("pause"); return 0; }
运行结果:3
——————————————————————————————————————
同一个时间段运行,或者一个线程运行完之后再运行下一个
#include <iostream> #include <thread> using namespace std; class theod { public: void operator()(int limit) //运算符重载,仿函数 { for(int i=0;i<limit;i++) { cout<<i<<endl; } } }; int main() { thread th = thread(theod(),88); //调用类内仿函数,参数写在旁边 //th.join(); //如果放在上面时会等待线程结束后再进行运行下面for循环 for(int i=0;i<88;i++) { cout<<"i am a:"<<endl; } th.join(); //join()写在下面时,main函数中的线程与调用函数那个线程会同个时间段进行运行,而不是依次 system("pause"); return 0; }
不懂的
#include <iostream> #include <thread> #include <string> using namespace std; int main() { string z = "test"; thread f = thread([&z](int a,int b){ cout<<z<<endl; cout<<a+b<<endl; },2,3); f.join(); system("pause"); return 0; }