Pthread API总结

Pthread API

函数名 说明
pthread_atfork fork前后的处理函数,一般不建议多线程下进行fork,见http://blog.csdn.net/anxuegang/article/details/66584722
pthread_attr_getguardsize
pthread_attr_setguardsize
堆栈保护区大小
PTHREAD_CREATE_DETACHED
PTHREAD_CREATE_JOINABLE
pthread_attr_getdetachstate
pthread_attr_setdetachstate
设置线程属性,是可分离的,还是可合并的
PTHREAD_INHERIT_SCHED
PTHREAD_EXPLICIT_SCHED
pthread_attr_getinheritsched
pthread_attr_setinheritsched
是继承父线程的调度属性,还是显式使用attr中提供的调度属性
SCHED_FIFO, SCHED_RR
SCHED_OTHER,SCHED_SPORADIC
pthread_attr_getschedpolicy
pthread_attr_setschedpolicy
pthread_attr_getschedparam
pthread_attr_setschedparam
pthread_getschedparam
pthread_setschedparam
设置调度策略,round-robin,fifo等不同策略,具体在sched_setscheduler中可以找到各个策略含义,struct sched_param结构参看http://www.oschina.net/question/565065_86198
PTHREAD_SCOPE_SYSTEM
PTHREAD_SCOPE_PROCESS
pthread_attr_setscope
pthread_attr_getscope
调度时线程抢占资源范围,系统范围和进程内范围
PTHREAD_STACK_MIN
pthread_attr_getstack
pthread_attr_setstack
pthread_attr_getstackaddr
pthread_attr_setstackaddr
pthread_attr_getstacksize
pthread_attr_setstacksize
设置线程的堆栈地址和堆栈大小
pthread_barrier_wait 一个计数器同步栅栏,只有指定数字的wait到达后,才开始后续动作
PTHREAD_PROCESS_PRIVATE
PTHREAD_PROCESS_SHARED
pthread_barrierattr_getpshared
pthread_barrierattr_setpshared
pthread_condattr_getpshared
pthread_condattr_setpshared
pthread_mutexattr_getpshared
pthread_mutexattr_setpshared
pthread_rwlockattr_getpshared
pthread_rwlockattr_setpshared
进程间共享
pthread_cancel 终止线程
pthread_cleanup_pop
pthread_cleanup_push
添加或清理handler,按照栈的顺序LIFO执行,弹出时可以指定是否执行
pthread_cond_broadcast
pthread_cond_signal
pthread_cond_timedwait
pthread_cond_wait
condition是在某个条件达到时执行,可以理解为某个变量成为某个值的时候,无需循环poll
pthread_condattr_getclock
pthread_condattr_setclock
在使用pthread_cond_timedwait时,可以自己指定一个clock ID来做超时服务,默认使用system clock
pthread_detach 分离线程,当该线程结束时,资源会被回收
pthread_equal
pthread_self
判断是否相同的两个线程,相同返回非0
pthread_exit 线程退出,注意main的效果;main()中调用pthread_exit,如果不调用,那么main退出时,它所创建的线程也会退出。如果结束时调用,那么main会block住,直到它所支持的线程全部完事。
pthread_getconcurrency
pthread_setconcurrency
设置并发数量,只是hint,不强制,在某些系统上并没有实现。默认情况下系统只是保证进程中有线程会被调度,从而使进程不断进行,这可能会保护系统资源,但是不一定是一个很有效率的并行(大概是说某些重要进程需要更高的并行度)
pthread_getcpuclockid 返回线程所使用的clock ID
pthread_key_create
pthread_key_delete
pthread_getspecific
pthread_setspecific
线程可以共用key,但是绑定的value是线程独有的,不能在destructor函数中调用pthread_setspecific
pthread_kill 向线程发送信号,如果是0,则做错误检测,并不真正发送信号
pthread_mutex_lock
pthread_mutex_unlock
pthread_mutex_timedlock
pthread_mutex_trylock
互斥锁
pthread_mutex_getprioceiling
pthread_mutex_setprioceiling
pthread_mutexattr_getprioceiling
pthread_mutexattr_setprioceiling
设置互斥锁的属性,优先级顶;set的时候会对mutex加锁
PTHREAD_PRIO_NONE
PTHREAD_PRIO_INHERIT
PTHREAD_PRIO_PROTECT
pthread_mutexattr_getprotocol
pthread_mutexattr_setprotocol
设置protocol,和优先级相关
PTHREAD_MUTEX_NORMAL(锁2次死锁,解锁别的线程锁定或者解锁2次,未定义行为)
PTHREAD_MUTEX_ERRORCHECK(上述行为都会返回错误,有错误检测性能会下降)
PTHREAD_MUTEX_RECURSIVE(可以锁多次,解锁别的线程锁定或者解锁2次,返回错误)
PTHREAD_MUTEX_DEFAULT(锁2次,解锁别的线程锁定或者解锁2次,全是未定义行为)
pthread_mutexattr_gettype
pthread_mutexattr_settype
设置互斥锁类型
pthread_once 对于同一个pthread_once_t变量,只有一个线程能够调用对应函数
pthread_rwlock_rdlock
pthread_rwlock_timedrdlock
pthread_rwlock_timedwrlock
pthread_rwlock_tryrdlock
pthread_rwlock_trywrlock
pthread_rwlock_unlock
pthread_rwlock_wrlock
读写锁
PTHREAD_CANCEL_ENABLE
PTHREAD_CANCEL_DISABLE
pthread_setcancelstate
PTHREAD_CANCEL_DEFERRED
PTHREAD_CANCEL_ASYNCHRONOUS
pthread_setcanceltype
pthread_testcancel
设置线程是否可以cancel;设置是否延迟cancel
SIG_BLOCK
SIG_SETMASK
SIG_UNBLOCK
pthread_sigmask
sigprocmask
设置信号屏蔽;下面这个是单线程进程中使用
pthread_spin_lock
pthread_spin_trylock
pthread_spin_unlock
自旋锁

注1 sporadic 不定时的,这种策略是有一个时间预算,当预算耗尽,就会降低优先级,然后隔一段指定时间补充预算

参考

[1] https://computing.llnl.gov/tutorials/pthreads/#AppendixA

你可能感兴趣的:(2102-CPP)