一、相关函数
函数 | 描述 |
---|---|
int pthread_equal(pthread_t tidl, pthread_t tid2); | 位于:<pthread.h>; 功能:比较两个线程是否是同一个线程; 返回:相等返回非0数值, 否则返回0。 |
pthread_t pthread_self(); | 位于:<pthread.h>; 功能:获取调用线程的线程ID。 |
int pthread_create(pthread_t *thread, pthread_attr_t *attr, void (*start_routine)(void *),void *arg); | 位于:<pthread.h>; 功能:创建一个新的线程实例; 参数说明: thread: 是一个指针,线程创建成功时,用以返回创建的线程ID attr:指定线程属性,NULL表示使用默认属性1 start_routine:函数指针,指向线程创建后要调用的函数。这个被线程调用的 函数也称为线程函数 arg:该参数指向传递给线程函数的参数 返回:成功返回0,出错返回错误编号。 |
void pthread_exit(void *rval_ptr); | 位于:<pthread.h>; 功能:终止指定线程; 参数说明: rval_ptr:函数的返回代码,只要pthread_join中的第二个参数 **rval_ptr不是NULL,这个值将被传递给 **rval_ptr |
int pthread_join(pthread_t thread, void **rval_ptr); | 位于:<pthread.h>; 功能:用来等待一个线程的结束; 参数说明: thread:被等待的线程标识符 rval_ptr:一个用户定义的指针,它可以用来存储被等待线程的返回值。 返回:成功返回0,出错返回错误编码。 |
int pthread_cancel(pthread_t tid); | 位于:<pthread.h>; 功能:取消同一进程中的其他线程; 返回:成功返回0,出错返回错误编码。 |
int pthread_cleanup_push(void (*rtn)(void *), void *arg); | 位于:<pthread.h>; 功能:创建一个线程退出时的清理函数。 |
int pthread_cleanup_pop(int execute); | 位于:<pthread.h>; 功能:触发清理函数,按照 pthread_cleanup_push 中相反的顺序进行。如果execute为0则对应的清理函数不会执行。 |
int pthread_detach(pthread_t tid); | 位于:<pthread.h>; 功能:分离线程; 返回:成功返回0,出错返回错误编码。 |
1.1 示列
#include <stdio.h>
#include <pthread.h>
void *new_thread(void *arr){
int *i = (int *)arr;
printf("xxxx %d", *i);
}
int main() {
pthread_t tid = pthread_self();
pthread_t currentTid;
int i = 100;
pthread_create(¤tTid, NULL, new_thread, &i);
printf("tid: %ld\n", tid);
return 0;
}
二、线程与进程之间的相似函数
进程函数 | 线程函数 | 描述 |
---|---|---|
fork | pthread_create | 创建新的控制流 |
exit | pthread_exit | 从现有的控制流中退出 |
waitpid | pthread_join | 从控制流中得到退出状态 |
atexit | pthread_cancel_push | 注册在退出控制流时调用的函数 |
getpid | pthread_self | 获取控制流的ID |
abort | pthread_cancel | 请求控制流的非正常退出 |
三、线程同步
3.1 互斥锁
互斥锁要么是锁住状态,要么是不叫锁状态。
函数 | 描述 |
---|---|
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutex_t *attr); | 位于:<pthread.h>; 功能:初始化一个互斥锁; 返回:成功返回0,出错返回-1。 |
int pthread_mutex_destroy(pthread_mutex_t *mutex); | 位于:<pthread.h>; 功能:注销一个互斥锁; 返回:成功返回0,出错返回-1。 |
int pthread_mutex_lock(pthread_mutex_t *mutex); | 位于:<pthread.h>; 功能:加锁; 返回:成功返回0,出错返回错误编码。 |
int pthread_mutex_trylock(pthread_mutex_t *mutex); | 位于:<pthread.h>; 功能:尝试获取锁; 返回:成功返回0,出错返回错误编码。 |
int pthread_mutex_unlock(pthread_mutex_t *mutex); | 位于:<pthread.h>; 功能:释放锁; 返回:成功返回0,出错返回错误编码。 |
int pthread_mutex_timelock(pthread_mutex_t *mutex, const struct timespec *tsptr); | 位于:<pthread.h>; 功能:设置允许绑定线程阻塞时间; 返回:成功返回0,出错返回-1。 |
3.2 读写锁
读写锁有三种状态:
读模式下加锁状态
、写模式下加锁状态
、不加锁状态
。
一次只有一个线程可以占有写模式的读写锁,但是对个线程可以同时占有读模式的读写锁。
函数 | 描述 |
---|---|
int pthread_rwlock_init(pthread_rwlock_t *rwlock, const pthread_rwlock_t *attr); | 位于:<pthread.h>; 功能:初始化一个读写锁; 返回:成功返回0,出错返回错误编码。 |
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock); | 位于:<pthread.h>; 功能:销毁一个读写锁; 返回:成功返回0,出错返回错误编码。 |
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock); | 位于:<pthread.h>; 功能:获取一个读模式下的锁; 返回:成功返回0,出错返回错误编码。 |
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock); | 位于:<pthread.h>; 功能:获得一个写模式下的锁; 返回:成功返回0,出错返回错误编码。 |
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock); | 位于:<pthread.h>; 功能:释放一个读写锁; 返回:成功返回0,出错返回错误编码。 |
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock); | 位于:<pthread.h>; 功能:尝试获取一个读模式下的锁; 返回:成功返回0,出错返回错误编码。 |
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock); | 位于:<pthread.h>; 功能:尝试获取一个写模式下的锁; 返回:成功返回0,出错返回错误编码。 |
int pthread_rwlock_timedrdlock(pthread_rwlock_t *rwlock, const struct timespec *tsptr); | 位于:<pthread.h>; 功能:获取读锁时最大等待时间; 返回:成功返回0,出错返回错误编码。 |
int pthread_rwlock_timedwrlock(pthread_rwlock_t *rwlock, const struct timespec *tsptr); | 位于:<pthread.h>; 功能:获取写锁时最大等待时间; 返回:成功返回0,出错返回错误编码。 |
3.3 条件变量
函数 | 描述 |
---|---|
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr); | 位于:<pthread.h>; 功能:初始化一个条件变量; 返回:成功返回0,出错返回错误编码。 |
int pthread_cond_destroy(pthread_cond_t *cond); | 位于:<pthread.h>; 功能:销毁一个条件变量; 返回:成功返回0,出错返回错误编码。 |
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); | 位于:<pthread.h>; 功能:等待条件变为真; 返回:成功返回0,出错返回错误编码。 |
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *tsptr); | 位于:<pthread.h>; 功能:在指定的时间内等待条件为真; 返回:成功返回0,出错返回错误编码。 |
int pthread_cond_signal(pthread_cond_t *cond); | 位于:<pthread.h>; 功能:唤醒一个等待改条件的线程; 返回:成功返回0,出错返回错误编码。 |
int pthread_cond_broadcast(pthread_cond_t *cond); | 位于:<pthread.h>; 功能:唤醒所有等待改条件的线程; 返回:成功返回0,出错返回错误编码。 |
3.4 自旋锁
函数 | 描述 |
---|---|
int pthread_spin_init(pthread_spinlock_t *lock, int pshared); | 位于:<pthread.h>; 功能:初始化一个自旋锁; 返回:成功返回0,出错返回错误编码。 |
int pthread_spin_destroy(pthread_spinlock_t *lock); | 位于:<pthread.h>; 功能:销毁一个自旋锁; 返回:成功返回0,出错返回错误编码。 |
int pthread_spin_lock(pthread_spinlock_t *lock); | 位于:<pthread.h>; 功能:获取一个自旋锁; 返回:成功返回0,出错返回错误编码。 |
int pthread_spin_trylock(pthread_spinlock_t *lock); | 位于:<pthread.h>; 功能:尝试获取一个自旋锁; 返回:成功返回0,出错返回错误编码。 |
int pthread_spin_unlock(pthread_spinlock_t *lock); | 位于:<pthread.h>; 功能:释放一个自旋锁; 返回:成功返回0,出错返回错误编码。 |
3.5 屏障
函数 | 描述 |
---|---|
int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count); | 位于:<pthread.h>; 功能:初始化一个屏障; 返回:成功返回0,出错返回错误编码。 |
int pthread_barrier_destroy(pthread_barrier_t *barrier); | 位于:<pthread.h>; 功能:销毁一个屏障; 返回:成功返回0,出错返回错误编码。 |
int pthread_barrier_wait(pthread_barrier_t *barrier); | 位于:<pthread.h>; 功能:把先后到达的多个线程挡在同一屏障前,直到所有线程到齐; 返回:成功返回0或者PTHREAD_BARRIER_SERIAL_THREAD,出错返回错误编码。 |
四、线程属性
函数 | 描述 |
---|---|
int pthread_attr_init(pthread_attr_t *attr); | 位于:<pthread.h>; 功能:初始化化属性值; 返回:成功返回0,出错返回错误编码。 |
int pthread_attr_destroy(pthread_attr_t *attr); | 位于:<pthread.h>; 功能:销毁属性; 返回:成功返回0,出错返回错误编码。 |
int pthread_attr_getdetachstate(const pthread_attr_t attr, int detachstate); | 位于:<pthread.h>; 功能:获取detachstate线程属性; 返回:成功返回0,出错返回错误编码。 |
int pthread_attr_setdetachstate(pthread_attr_t attr, int detachstate); | 位于:<pthread.h>; 功能:设置线程属性detachstate设置为以下两个合法值之一:PTHREAD_CREATE_DETACHED,以分离状态启动线程;或者 PTHREAD_CREATE_JOINABLE,正常启动线程,应用程序可以获取线程的终止状态; 返回:成功返回0,出错返回错误编码。 |
int pthread_attr_getstack(const pthread_attr_t *attr, void **stackaddr, size_t *stacksize); | 位于:<pthread.h>; 功能:获取线程的栈大小 和起始地址; 返回:成功返回0,出错返回错误编码。 |
int pthread_attr_setstack(pthread_attr_t attr, void *stackaddr, size_t stacksize); | 位于:<pthread.h>; 功能:设定线程栈的地址和大小; 返回:成功返回0,出错返回错误编码。 |
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t *stacksize); | 位于:<pthread.h>; 功能:设置线程栈属性 stacksize; 返回:成功返回0,出错返回错误编码。 |
int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize); | 位于:<pthread.h>; 功能:获取线程栈属性 stacksize; 返回:成功返回0,出错返回错误编码。 |
int pthread_attr_getguardsize(const pthread_attr_t *attr, size_t *guardsize); | 位于:<pthread.h>; 功能:获取线程的栈保护区大小; 返回:成功返回0,出错返回错误编码。 |
int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize); | 位于:<pthread.h>; 功能:设置线程的栈保护区大小; 返回:成功返回0,出错返回错误编码。 |
五、同步属性
函数 | 描述 |
---|---|
int pthread_mutexattr_init(pthread_mutexattr_t *attr); | 位于:<pthread.h>; 功能:初始化互斥量属性; 返回:成功返回0,出错返回错误编码。 |
int pthread_mutexattr_destroy(pthread_mutexattr_t *attr); | 位于:<pthread.h>; 功能:销毁互斥量属性; 返回:成功返回0,出错返回错误编码。 |
int pthread_mutexattr_getpshared(const pthread_mutexattr_t *attr, int *pshared); | 位于:<pthread.h>; 功能:; 返回:成功返回0,出错返回错误编码。 |
int pthread_mutexattr_getpshared(const pthread_mutexattr_t *attr, int *pshared); | 位于:<pthread.h>; 功能:获取进程共享属性; 返回:成功返回0,出错返回错误编码。 |
int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared); | 位于:<pthread.h>; 功能:设置进程共享属性; 返回:成功返回0,出错返回错误编码。 |
int pthread_mutexattr_getrobust(const pthread_mutexattr_t *attr, int robust); | 位于:<pthread.h>; 功能:获取健壮的互斥量属性值; 返回:成功返回0,出错返回错误编码。 |
int pthread_mutexattr_setrobust(pthread_mutexattr_t *attr, int robust); | 位于:<pthread.h>; 功能:设置健壮的互斥量属性值; 返回:成功返回0,出错返回错误编码。 |
int pthread_mutexattr_consistent(pthread_mutexattr_t *mutex); | 位于:<pthread.h>; 功能:指名该互斥量相关的状态在互斥量解锁之前是一致的; 返回:成功返回0,出错返回错误编码。 |
int pthread_mutexattr_gettype(const pthread_mutexattr_t *attr, int *type); | 位于:<pthread.h>; 功能:获取互斥量类型属性; 返回:成功返回0,出错返回错误编码。 |
int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type); | 位于:<pthread.h>; 功能:设置互斥量类型属性; 返回:成功返回0,出错返回错误编码。 |
int pthread_rwlockattr_init(pthread_rwlockattr_t *attr); | 位于:<pthread.h>; 功能:初始化pthread_rwlockattr_t 结构; 返回:成功返回0,出错返回错误编码。 |
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr); | 位于:<pthread.h>; 功能:销毁pthread_rwlockattr_t 结构; 返回:成功返回0,出错返回错误编码。 |
int pthread_rwlockattr_getpshared(cpnst pthread_rwlockattr_t *attr, int *pshared); | 位于:<pthread.h>; 功能:获取读写锁的进程共享属性; 返回:成功返回0,出错返回错误编码。 |
int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr, int pshared); | 位于:<pthread.h>; 功能:设置读写锁的进程共享属性; 返回:成功返回0,出错返回错误编码。 |
int pthread_condattr_init(pthread_condattr_t *attr); | 位于:<pthread.h>; 功能:; 返回:成功返回0,出错返回错误编码。 |
int pthread_condattr_destroy(pthread_condattr_t *attr); | 位于:<pthread.h>; 功能:销毁条件变量函数; 返回:成功返回0,出错返回错误编码。 |
int pthread_condattr_getpahared(const pthread_condattr_t *attr, int *pshared); | 位于:<pthread.h>; 功能:获取进程共享属性; 返回:成功返回0,出错返回错误编码。 |
int pthread_condattr_setpahared(pthread_condattr_t *attr, int pshared); | 位于:<pthread.h>; 功能:设置进程共享属性; 返回:成功返回0,出错返回错误编码。 |
int pthread_condattr_getclock(const pthread_condattr_t *attr, clockid_t *clock_id); | 位于:<pthread.h>; 功能:获取可被用于pthread_cond_timewait函数的时钟ID; 返回:成功返回0,出错返回错误编码。 |
int pthread_condattr_setclock(pthread_condattr_t *attr, clockid_t clock_id); | 位于:<pthread.h>; 功能:设置可被用于pthread_cond_timewait函数的时钟ID; 返回:成功返回0,出错返回错误编码。 |
int pthread_barrierattr_init(pthread_barrierattr_t *attr); | 位于:<pthread.h>; 功能:初始化屏障属性对象; 返回:成功返回0,出错返回错误编码。 |
int pthread_barrierattr_destroy(pthread_barrierattr_t *attr); | 位于:<pthread.h>; 功能:销毁屏障性属性对象; 返回:成功返回0,出错返回错误编码。 |
int pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr, int *pshared); | 位于:<pthread.h>; 功能:获取进程共享属性值; 返回:成功返回0,出错返回错误编码。 |
int pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared); | 位于:<pthread.h>; 功能:设置进程共享属性值; 返回:成功返回0,出错返回错误编码。 |