1、在centos中利用vim编辑器编写相应代码段:vim pthread_create.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
void* callback(void * arg)
{
for(int i=0;i<5;++i)
{
printf("子线程:i=%d\n",i);
}
printf("子线程:%ld\n,pthread_self());
return NULL;
}
int main()
{
pthread_t tid; //调用创建线程的函数,创建一个线程ID
pthread_create(&tid,NULL,callback,NULL);
for(int i=0;i<5;i++)
{
printf("主线程:i=%d\n",i);
}
printf("主线程:%ld\n,pthread_self());
sleep(3); /*进入程序后主线程先执行,因为主线程先抢到了时间碎片。而在子线程还未抢到时间碎片
之前,主线程可能就执行完毕并将虚拟地址空间释放,那么子线程所有资源也就被释放
了。所以子线程还未来得及执行就已经死了。为了避免这一情况的出现。利用sleep函数
让主线程工作完后休眠三秒,此时主线程就放弃了CPU的资源。此时,主线程不再消耗系
统资源,因此无论睡多少秒都不影响程序的执行效率。然后子线程有时间去抢到时间碎
片,并向下执行,执行完毕后主线程醒了,继续向下执行,退出程序;*/
//法二:调用线程退出函数,这样在主线程退出后,不会影响其它子线程的正常运行;
//pthread_exit(NULL);
return 0;
}
2、利用gcc命令进行编译:gcc pthread_creat.c -lpthread -o app
./app
3、运行结果:
注意: ①主线程执行完毕后就后悔释放系统分配给他的虚拟地址空间,此时,子线程也就 不复存在了。也因为多个子线程共用一块地址空间。
②为了保证子线程可以执行,可调用sleep函数让主线程先休眠;
③调用线程退出程序可以保证在主程序退出后,其它子程序可以继续运行, pthread_exit(NULL);;
③程序编译时,需要添加-lpthread,否则会出现函数的定义找不到的问题;