码迷,mamicode.com
首页 > 其他好文 > 详细

pthread_create的浅析

时间:2016-05-11 23:59:45      阅读:453      评论:0      收藏:0      [点我收藏+]

标签:pthread_create   pthread_join   

看下面代码,你是否能得出正确答案呢?

#include<stdio.h>
#include<string.h>
#include <pthread.h>
  
void* print1(void* data){
    printf("1 ");
}
  
void* print2(void* data){
    printf("2 ");
}
 
void* print3(void* data){
    printf("3 ");
}
 
int main(void){
    pthread_t t,t1,t2;
     
    pthread_create(&t,0,print1,NULL);
    pthread_create(&t1,0,print2,NULL);
    pthread_create(&t2,0,print3,NULL);
     
    pthread_join(t,NULL);
    pthread_join(t1,NULL);
    pthread_join(t2,NULL);
    printf("\n");
}

此刻,你将提出pthread_create和pthread_join到底是什么呢?

接下来,我们就来看一看。

pthread_create函数


函数简介


pthread_create是UNIX环境创建线程函数


头文件


#include<pthread.h>


函数声明

int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);


返回值


若成功则返回0,否则返回出错编号


参数


第一个参数为指向线程标识符的指针。


第二个参数用来设置线程属性。


第三个参数是线程运行函数的起始地址。


最后一个参数是运行函数的参数。


另外


在编译时注意加上-lpthread参数,以调用静态链接库。因为pthread并非Linux系统的默认库

函数pthread_join用来等待一个线程的结束。

头文件 : #include <pthread.h>

函数定义: 

int pthread_join(pthread_t thread, void **retval);

描述 :pthread_join()函数,以阻塞的方式等待thread指定的线程结束。当函数返回时,被等待线程的资源被收回。如果线程已经结束,那么该函数会立即返回。并且thread指定的线程必须是joinable的。

参数 :thread: 线程标识符,即线程ID,标识唯一线程。retval: 用户定义的指针,用来存储被等待线程的返回值。

返回值 : 0代表成功。 失败,返回的则是错误号。


好了,我们已经了解了上面两个函数,我们现在来看看这个题。

pthread_join(t,NULL)意思是等待线程t执行结束了再执行下面的代码。但在这之前,3个线程都已提交,它们可能都已经顺序随机地执行了,也可能没有,所以结果也是不可预测的。

如果想更进一了解它的用法,可以看看http://blog.csdn.net/tommy_wxie/article/details/8545253

pthread_create的浅析

标签:pthread_create   pthread_join   

原文地址:http://10741706.blog.51cto.com/10731706/1772417

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!