您的位置:首页 > 其它

多线程之pthread_create创建线程

2013-01-20 23:26 441 查看
pthreads定义了一套C程序语言类型、函数、与常量。以pthread.h和一个线程库实现。

数据类型:

pthread_t:线程句柄

pthread_attr_t:线程属性

线程操作函数:

pthread_create():创建一个线程

pthread_exit():终止当前线程

pthread_cancel():中断另外一个线程的运行

pthread_join():阻塞当前的线程,直到另外一个线程运行结束

pthread_attr_init():初始化线程的属性

pthread_attr_setdetachstate():设置脱离状态的属性

pthread_attr_getdetachstate():获取脱离状态的属性

pthread_attr_destroy():删除线程的属性

pthread_kill():向线程发送一个信号

.....

创建线程:

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_rtn) (void*),void *arg);

*thread:线程id (指向线程标识符的指针)

*attr:线程属性(通常为空)

*start_rtn:线程要执行的函数(线程运行函数的起始地址)

*arg:start_rtn的参数

返回值为零才算成功,其它表示错误

编译时需要加上 -lpthread库

示例一:

#include <stdio.h>

#include <pthread.h>

void *pthread_1(void) //线程1执行的函数

{

inti;

for(i=1; i < 5; i++){

printf("pthread1.\n");

sleep(1);

}

return (void *)0;

}

void *pthread_2(void) //线程2执行的函数

{

inti;

for(i=1;i < 5; i++){

printf("pthread2.\n");

sleep(1);

}

return (void *)0;

}

int main(int argc, char argv[])

{

intret = 0;

pthread_tpthid1, pthid2; //线程的id

ret= pthread_create(&pthid1,NULL, (void *)pthread_1, NULL);

if(ret) //
非0则创建失败

{

perror("createthread 1 failed.\n");

return1;

}

ret= pthread_create(&pthid2, NULL, (void *)pthread_2, NULL);

if(ret)

{

perror("createthread 2 failed.\n");

return1;

}

pthread_join(pthid1,NULL); //等待pthid1,否则不会等待,继续往下执行

pthread_join(pthid2,NULL); //如无,遇到下面的return会结束进程

return0;

}

示例二:传递参数,初始化

/*

*pthread_init.c

*

* Created on: Jan 20, 2013

* Author: linuxdba@qq.com

*/

#include <stdio.h>

#include <pthread.h>

void *create(void *arg)

{

int *num;

num = (int*)arg;

printf("theinput number is: %d.\n", *num);

return(void *)0;

}

int main(int argc, char argv[])

{

intret;

intt;

printf("Inputone number:");

scanf("%d",&t);

int*attr = &t;

pthread_tpthid;

ret= pthread_create(&pthid, NULL, (void *)create, (void *)attr);

if(ret)

{

perror("createthread failed.\n");

return1;

}

pthread_join(pthid,NULL);

return0;

}

示例三:共享数据

/*

*pthread_share.c

*

* Created on: Jan 20, 2013

* Author: linuxdba@qq.com

*/

#include <stdio.h>

#include <pthread.h>

static int i = 3;

void *pthread_1(void)

{

printf("thread1, i is: %d.\n", i);

return(void *)0;

}

void *pthread_2(void)

{

printf("thread2, i is: %d.\n", i);

return(void *)0;

}

int main(int argc, char argv[])

{

intret = 0;

inti = 5;

pthread_tpthid1, pthid2;

printf("mainthread, i is: %d.\n", i);

ret= pthread_create(&pthid1, NULL, (void *)pthread_1, NULL);

if(ret)

{

printf("createthread 1 failed.\n");

return1;

}

ret= pthread_create(&pthid2, NULL, (void *)pthread_2, NULL);

if(ret)

{

printf("createthread 2 failed.\n");

return1;

}

pthread_join(pthid1,NULL);

pthread_join(pthid2,NULL);

return0;

}

此段程序之中两个线程是对等的,不存在先后顺序;

i
为全局变量,main函数内部为局部的变量。

http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_create.3.html http://baike.baidu.com/view/974776.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: