Pthread

来自艺搜天下
跳到导航 跳到搜索

获取线程id

pthread_t  pthread_self(void);

创建线程

int  pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void *),  void *restrict arg); 是异步创建

第一个参数:返回的线程id

第二个参数:传递的线程属性,可以是NULL

第三个参数:具体的线程函数指针

第四个参数:给函数指针的参数

成功返回0

终止线程

void    pthread_exit(void *value_ptr);   //可以返回结构体参数

等待线程终止

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

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

通过pthread_join可以获得线程的退出状态

线程结束前自动清理

void     pthread_cleanup_push(void (*routine)(void *), void *arg);
void     pthread_cleanup_pop(int execute);  //参数表示执行到pthread_cleanup_pop()时是否在弹出清理函数的同时执行该函数,为0表示不执行

通过pthread_cleanup_push 来注册线程结束时自动调用的清理函数

注册的函数按照顺序压入一个栈内,调用的时候一个个的出栈。后入先出。

当调用pthread_exit而不是return时会自动调用

必须成对的出现在同一个函数中

线程detach状态,通过pthread_detach指定线程进入detach状态

int    pthread_detach(pthread_t thread);

使用

int test=345;
int err = pthread_create(&ntid, NULL, thr_fn, (void *)test);
线程函数内int i = (int)arg;
int err = pthread_create(&ntid, NULL, thr_fn, (void *)&test);
线程函数内int i = *(int*)arg;

struct fun_para{
  var para1;//参数1
  var para2;//参数2      
}
struct fun_para para;
pthread_create(&ntid, NULL, thr_fn, &para);
线程函数内 
fun_para *para;
para = (fun_para *) arg;
para->para1;//参数1
para->para2;//参数2