Linux 多线程(一)

1.学习如何创建多线程

2.创建多线程的函数的参数定义

3.主线程和子线程的关系,如何实现调度

实验简介:在主线程开辟两个新线程,分别为乌龟线程和兔子线程,模拟龟兔赛跑的过程

主要函数介绍:

pthread_t rabbit,turtle;定义变量

pthread_create(&rabbit,NULL,th_fn,(void *)10)//创建一个线程,线程会执行th_fn函数里面的内容,

                                                                        10为传入th_fn函数的参数

pthread_join(rabbit,NULL);//主线程等待子线程结束,下面的程序中可以看出,若没有这一句,主线程直接return 0 就直接结束                                         //而子线程还有东西没有执行完,资源也没有得到释放

pthread_self();//该线程的id

源码如下:



#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void * th_fn(void *arg)
{
   int value=(int)arg;
   for(int i=0;i<value;i++)
   {
      printf("%lx run %d\n",pthread_self(),i);
      sleep(1);
   }
   return (void*)0;
}


int main(void)
{
   int err;
   pthread_t rabbit,turtle;
   if((err=pthread_create(&rabbit,NULL,th_fn,(void *)10))!=0)
   {
      perror("pthread_create error");
   }
   if((err=pthread_create(&turtle,NULL,th_fn,(void *)10))!=0)
   {
      perror("pthread_create error");
   }
   pthread_join(rabbit,NULL);
   pthread_join(turtle,NULL);
   printf("control thread id: %lx\n",pthread_self());
   printf("finished!\n");
   return 0;

}


如果去掉 pthread_join(rabbit,NULL);pthread_join(turtle,NULL);,其结果为:

control thread id: 7fd241a05700

finished!

正常运行如下:

7fe115b59700 run 0
7fe11635a700 run 0
7fe115b59700 run 1
7fe11635a700 run 1
7fe115b59700 run 2
7fe11635a700 run 2
7fe115b59700 run 3
7fe11635a700 run 3
7fe115b59700 run 4
7fe11635a700 run 4
7fe115b59700 run 5
7fe11635a700 run 5
7fe115b59700 run 6
7fe11635a700 run 6
7fe115b59700 run 7
7fe11635a700 run 7
7fe115b59700 run 8
7fe11635a700 run 8
7fe115b59700 run 9
7fe11635a700 run 9
control thread id: 7fe116b5d700
finished!

猜你喜欢

转载自blog.csdn.net/qq_38211852/article/details/80345089