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

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

<1>. t1.join(): 主进程等待任务线程示例
#include 
#include 
#include  
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 
#include 
#include  
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();
通过打印看出,主进程和任务线程各自执行,结果是主进程执行完了,任务线程没来的及执行;
也有可能,任务线程执行完了,主进程还没来得及执行,这种情况都有可能.

你可能感兴趣的:(C++入门系列,c++,开发语言)