linux下的多线程编程常用函数

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档