Linux多线程程序设计------创建线程
1、创建线程
#include<pthread.h>
int pthread_create(pthread_t* tidp,const pthread_attr_t *attr,void*(*start_rtn)(void),void*arg)
tidp:线程id
attr:线程属性(通常为空)
start_rtn:线程要执行的函数
arg:start_rtn的参数
线程执行函数。
2、编译
因为pthread的库不是Linux系统的库,所以在进行编译时要加上-l pthread
3 、几个实例:
1)Thread_create.c
#include<pthread.h>
#include<stdio.h>
void *myThread1(void)
{
int i;
for(i=0;i<100;i++)
{
printf("This is the 2st pthread,created by zieckey.\n");
sleep(1);
}
}
int main()
{
int i=0,rect=0;
pthread_t id1,id2;
rect=pthread_create(&id1,NULL,(void*)myThread1,NULL);
if(rect)
{
printf("create pthread error!\n");
return 1;
}
return 0;
}
gcc thread_create.c -l pthread -o thread_create
2)thread_int.c
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
void *create(void *arg)
{
int *num;
num=(int *)arg;
printf("create parameter is %d %d\n",num[0],num[1]);
return -1;
}
int main(int argc,char* argv[])
{
pthread_t tidp;
int error;
int test[2]={4,5};
int *attr=&test;
error=pthread_create(&tidp,NULL,create,(void*)attr);
if(error)
{
printf("pthread_create is created is not created...\n");
return -1;
}
sleep(1);
printf("pthread_create is created...\n");
return 0;
}
输出结果:
终止线程:
如果进程中任何一个线程中调用exit或者_exit,那么整个进程会终止。线程的正常退出方式有:
(1)线程从启动例程中返回。return -1;
(2)线程可以被另一个进程终止
(3)线程自己调用pthread_exit函数
#inlcude<pthread.h>
void pthread_exit(void *rval_ptr)
功能:终止调用线程
Rval_ptr:线程退出返回值的指针
线程等待:
#include<pthread.h>
int pthread_join(pthread_t tid,void **rval_ptr)
功能:阻塞调用线程,直到指定的线程终止
Tid:等待退出的线程ID
Rval_ptr:线程退出的返回指针。