标签:
pthread_equal(pthread_t tid1, pthread_t tid2);
pthread_t pthread_self(void)
int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *resttrict arg);
新建线程ID会被设置tidp指向内存,attr设置线程属性,start_rtn函数的地址,arg函数入参,如果过个参数,使用结构体。创建新线程继承调用线程的信号屏蔽字,挂起信号集会被删除。
1.代码返回
2.被其他线程取消
3.调用pthread_exit
void pthread_exit(void *rval_ptr) 结束线程
rval_ptr参数是一个无类型指针,代表线程返回值
int pthread_join(pthread_t thread, void **rval_ptr); 当前线程等待指定线程结束
rval_ptr可以使线程正常代码的return的值,也可以是pthread_exit指定值。
线程可以通过pthread_cancel请求取消其他线程
int pthread_cancel(pthread_t tid);
线程清理处理程序:
void pthread_cleanup_push(void (*rtn)(void *), void *arg);
void pthread_cleanup_pop(int execute);
通过pthread_cleanup_push函数注册线程清理函数,最后一定通过pthread_exit或者由其他线程调用pthread_cancel线程终止才会调用这些清理函数。线程正常终止不会调用这些清理函数的。
int pthread_mutex_init 初始化
int pthread_mutex_destroy 销毁
int pthread_mutex_lock持锁
int pthread_mutex_trylock 尝试持锁,如果有锁,不阻塞,直接返回
int pthread_mutex_unlock释放锁
int pthread_mutex_timedlock和持锁类似,到时间自动释放锁
避免死锁的方法,所有线程持锁顺序一致
就是一个线程写的时候其他线程阻塞,但是没有写线程都是读的话,不会持锁,函数与普通持锁函数类似。
也有带有超时的读写锁。
int pthread_cond_init 初始化
int pthread_cond_destory 销毁
int pthread_cond_wait 释放锁,线程等待,直到条件发生改变(等待条件改变的时候,必须已经持锁)
int pthread_cond_timewait 和上面类似,只是有一个超时不等待了
int pthread_cond_signal 发送条件改变的信号,至少唤醒一个
int pthread_cond_broadcast 唤醒所有等待该条件的线程
允许每个线程等待,直到所有的合作线程都达到某一个点,然后继续执行
int pthread_barrier_init 这里有一个count参数,代表总共要等待多少线程
int pthread_barrier_destory
int pthread_barrier_wait 等待一个线程(睡眠),直到所有线程等待满足数量count,所有的线程才会被唤醒
标签:
原文地址:http://blog.csdn.net/kc58236582/article/details/51338371