Pthread API
函数名说明pthread_atforkfork前后的处理函数,一般不建议多线程下进行fork,见http://blog.csdn.net/anxuegang/article/details/66584722pthread_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_86198PTHREAD_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_waitcondition是在某个条件达到时执行,可以理解为某个变量成为某个值的时候,无需循环pollpthread_condattr_getclock pthread_condattr_setclock在使用pthread_cond_timedwait时,可以自己指定一个clock ID来做超时服务,默认使用system clockpthread_detach分离线程,当该线程结束时,资源会被回收pthread_equal pthread_self判断是否相同的两个线程,相同返回非0pthread_exit线程退出,注意main的效果;main()中调用pthread_exit,如果不调用,那么main退出时,它所创建的线程也会退出。如果结束时调用,那么main会block住,直到它所支持的线程全部完事。pthread_getconcurrency pthread_setconcurrency设置并发数量,只是hint,不强制,在某些系统上并没有实现。默认情况下系统只是保证进程中有线程会被调度,从而使进程不断进行,这可能会保护系统资源,但是不一定是一个很有效率的并行(大概是说某些重要进程需要更高的并行度)pthread_getcpuclockid返回线程所使用的clock IDpthread_key_create pthread_key_delete pthread_getspecific pthread_setspecific线程可以共用key,但是绑定的value是线程独有的,不能在destructor函数中调用pthread_setspecificpthread_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;设置是否延迟cancelSIG_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