> 文章列表 > C++之C++11 thread线程示例(一百三十八)

C++之C++11 thread线程示例(一百三十八)

C++之C++11 thread线程示例(一百三十八)

1.C++11 thread创建传参线程

<1>. t1.join(): 主进程等待任务线程示例
#include <iostream>
#include <thread>
#include <unistd.h> 
using namespace std;void task_01(int i){  printf("xxx------->%s(), line = %d\\n",__FUNCTION__,__LINE__);  while(i < 1000)i++;printf("xxx------->%s(), line = %d, i = %d\\n",__FUNCTION__,__LINE__,i);
}
int main(){int i = 0, j = 0;//1.任务线程.thread t1(task_01, i);//t1.detach();//线程与进程分离,各自执行,顺序是混换的.t1.join();//主进程等待线程执行结束,然后主进程开始执行.printf("xxx------->%s(), line = %d\\n",__FUNCTION__,__LINE__);return 0;
}

打印:
xxx------->task_01(), line = 7
xxx------->task_01(), line = 10, i = 1000
xxx------->main(), line = 20

在thread中创建一个任务线程task_01(),并将参数i = 1传进去; 然后 t1.join();
通过打印看出,主进程会等待线程执行完毕,才开始执行.

<2>. t1.detach(): 主进程和任务线程分离示例
#include <iostream>
#include <thread>
#include <unistd.h> 
using namespace std;void task_01(int i){  printf("xxx------->%s(), line = %d\\n",__FUNCTION__,__LINE__);  while(i < 1000)i++;printf("xxx------->%s(), line = %d, i = %d\\n",__FUNCTION__,__LINE__,i);
}
int main(){int i = 0, j = 0;//1.任务线程.thread t1(task_01, i);t1.detach();//线程与进程分离,各自执行,顺序是混换的.//t1.join();//主进程等待线程执行结束,然后主进程开始执行.printf("xxx------->%s(), line = %d\\n",__FUNCTION__,__LINE__);return 0;
}

打印
xxx------->main(), line = 20

在thread中创建一个任务线程task_01(),并将参数i = 1传进去; 然后 t1.detach();
通过打印看出,主进程和任务线程各自执行,结果是主进程执行完了,任务线程没来的及执行;
也有可能,任务线程执行完了,主进程还没来得及执行,这种情况都有可能.