标签:
int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, void*(*func)(void), arg)
tidp : 线程的 ID
attr : 线程的属性,一般都是为空的
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