标签:
int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, void*(*func)(void), arg)tidp : 线程的 IDattr : 线程的属性,一般都是为空的func : 线程要执行的函数,arg : 函数的参数- 创建成功,返回值为零,其他的或,就是失败
进程是去执行 fork 之后的所有的代码,而线程是去执行,创建的线程指定的函数
#include<stdio.h>#include<stdlib.h>#include<pthread.h>int a = 1;// 传递的参数是:void *arg,指针void *func1(void *arg){printf("func1 a = %d\n", a)int *num;num = (int *)arg;printf("1st\n");a++;printf("func12 a = %d\n", a)return (void *)0;}void *func2(void){printf("2st\n");}int main(){int i = 0, ret = 0;pthread_t id1, id2;int k = 3;printf("main a = %d\n", a)// 创建线程ret = pthread_create(&id2, NULL, (void*)func2, NULL);if (ret){printf("error1\n");exit(-1);}// 创建线程,这边指定了传参,以地址的方式进行传递i = pthread_create(&id1, NULL, (void*)func1, &k);if (i){printf("error1\n");exit(-1);}sleep(3);printf("main2 a = %d\n", a);pthread_join(id1, NULL);pthread_join(id2, NULL);}
int pthread_join(pthread_t tid, void **rval_ptr)tid : 线程号rval_ptr :退出的时候,返回的指针使得主函数数等待,tid 执行完,使用 tid 进程有机会去执行,不然有可能主线程自己执行完毕,创建的线程就没有机会去执行主函数执行到 pthread_join 函数,发现pthread_join,那么就等待指定的进程是否执行结束,确保线程被执行,不会因为主函数执行的速度快,而线程没有被执行,会一直等待子线程可以被执行。当执行的时候,假如没有 pthread_join 的时候,但是有 sleep 的时候,也是会去执行子线程,
int pthread_exit(void * rval_ptr);rval_ptr: 线程退出返回值的指针
获得线程ID:pthread_t pthread_self(void)获得调用线程的 ID
标签:
原文地址:http://www.cnblogs.com/qxj511/p/4917714.html