1、//int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
pthread_t 定义的一个unsigned long 的指针类型*thread
const pthread_attr_t *attr是线程的属性
void *(*start_routine) (void *)是一个调用的函数指针去分配工作(去干活)
void *arg是给此线程传参的的参数
新创建的线程从函数start_routine的地址开始运行,该函数只有一个无类型指针参数arg。如果需要想函数start_routine函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg参数传入。
返回值,成功返回0,失败返回错误编号
2、线程退出
void pthread_exit(void *retval);
单个线程可以通过以下三种方式退出,在不终止整个进程的情况下停止它的控制流
①线程只是从启动例程中返回,返回值是线程的退出码。
②线程可以被同一进程中的其他线程取消。
③线程调用pthread_exit;
3、线程等待
int pthread_join(pthread_t thread, void **retval);
将线程阻塞。直到指定的线程调用pthread_exit(一般两个配合一起用)
4、线程ID获取和比较
pthread_t pthread_self(void);
与进程的getpid();同理
#include <stdio.h>
#include <pthread.h>
//int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
// void *(*start_routine) (void *), void *arg);
void *func(void *arg){
static char *ret = "t1 is run out";
printf("t1:%ld thread is created\n",(unsigned long)pthread_self()); //线程的PID号
printf("t1:param is %d\n",*((int *)arg));
pthread_exit((void *)ret); //接收到pthread_join传的pret,线程退出
}
int main()
{
int ret;
pthread_t t1;
int param = 100;
// int *pret;
char *pret;
ret = pthread_create(&t1,NULL,func,(void *)¶m); //创建线程t1
if(ret == 0){
printf("main:create t1 success \n");
}
printf("main :%ld\n",(unsigned long)pthread_self());
pthread_join(t1,(void **)&pret); //线程阻塞,防止创建完线程后直接执行到return 0;
//传一个字符串pret过去
printf("main:t1 quit = %s\n",pret);
return 0;
}