linux下的多线程编程常用函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux下pthread的实现是通过系统调用clone()来实现的。clone()是Linux所特
有的系统调用,他的使用方式类似fork.
int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr, void *(*start_rtn)(void),void *restrict arg); 返回值:若是成功建立线程返回0,否则返回错误的编号
形式参数:
pthread_t *restrict tidp 要创建的线程的线程id指针
const pthread_attr_t *restrict attr 创建线程时的线程属性
void* (start_rtn)(void) 返回值是void类型的指针函数
void *restrict arg start_rtn的行参
进行编译的时候要加上-lpthread
向线程传递参数。
例程2:
功能:向新的线程传递整形值
#include
#include
#include
void *create(void *arg)
{
int *num;
num=(int *)arg;
printf("create parameter is %d \n",*num);
return (void *)0;
}
int main(int argc ,char *argv[])
{
pthread_t tidp;
int error;
int test=4;
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; }
编译方法:
gcc -lpthread pthread_int.c -Wall
执行结果:
create parameter is 4
pthread_create is created is created ...
例程总结:
能够看出来,我们在main函数中传递的整行指针,传递到我们新建的线程函数中。
在上面的例子能够看出来我们向新的线程传入了另一个线程的int数据,线程之间还能够传递字符串或是更复杂的数据结构。
例程3:
程式功能:向新建的线程传递字符串
程式名称:pthread_string.c
#include
#include
#include
void *create(void *arg)
{
char *name;
name=(char *)arg;
printf("The parameter passed from main function is %s \n",name);
return (void *)0;
}
int main(int argc, char *argv[])
{
char *a="zieckey";
int error;
pthread_t tidp;
error=pthread_create(&tidp, NULL, create, (void *)a);
if(error!=0)
{
printf("pthread is not created.\n");
return -1;
}
sleep(1);
printf("pthread is created... \n");
return 0;
}
程式目的:验证新建立的线程能够共享进程中的数据
程式名称:pthread_share.c
#include
#include
#include
static int a=4;
void *create(void *arg)
{
printf("new pthread ... \n");
printf("a=%d \n",a);
return (void *)0;
}
int main(int argc,char *argv[])
{
pthread_t tidp;
int error;
a=5;
error=pthread_create(&tidp, NULL, create, NULL);
if(error!=0)
{
printf("new thread is not create ... \n");
return -1;
}
sleep(1);
printf("new thread is created ... \n");
return 0;
}
2、线程的终止
假如进程中任何一个线程中调用exit,_Exit,或是_exit,那么整个进程就会终止,
和此类似,假如信号的默认的动作是终止进程,那么,把该信号发送到线程会终止进程。
线程的正常退出的方式:
(1) 线程只是从启动例程中返回,返回值是线程中的退出码
(2) 线程能够被另一个进程进行终止
(3) 线程自己调用pthread_exit函数
两个重要的函数原型:
#include
void pthread_exit(void *rval_ptr);
/*rval_ptr 线程退出返回的指针*/
int pthread_join(pthread_t thread,void **rval_ptr);
/*成功结束进程为0,否则为错误编码*/
例程6