函数名 | 说明 |
---|---|
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