pthread学习笔记
学过之后, 自己给自己讲一遍 , 然后记住学到的接口
  • pthread_create()             线程创建函数
    
  • pthread_self()               获取当前线程ID(返回值与线程Id一致 无符号长整形 %ld)
    
  • 线程资源回收
    * pthread_join()        默认结合态,用次函数阻塞主线程回收子线程资源 
    * pthread_detach()      设置子线程为分离态,线程退出后资源自动回收
    * pthread_exit()        线程退出函数,相当于return
    
  • 线程取消
    * pthread_cancel()      线程取消(注意:在系统调用(从用户区切换到内核区)时,才会正确的接收——pthread_exit() ,否则相当于return了线程)
    * pthread_setcancelstate()   设置取消状态
    * int pthread_equal(pthread_t t1, pthread_t t2);   线程Id比较函数
    * pthread_testcancle()       使函数在没有系统调用取消点的情况下,依然能够正确接收到取消信号
    
  • 线程Id比较函数     int pthread_equal(pthread_t t1, pthread_t t2);   
    
  • 注册线程退出清理函数
    * pthread_cleanup_push()    注册线程退出清理函数
    * pthread_cleanup_pop()     弹出线程清理函数,参数为0仅弹出不执行,否则弹出并执行
    
  • 互斥锁
    * pthread_mutex_init()      互斥锁初始化(互斥锁的创建)
    * pthread_mutex_lock()      上锁(如果已经上锁,则阻塞等待,等待至解锁后,作上锁操作)
    * pthread_mutex_unlock()    解锁
    * pthread_mutex_destroy()   销毁互斥锁
    * pthread_mutex_trylock()   上锁(如果已经上锁,则返回)
    /***************************************************/
          读写锁(互斥锁的升级版本)
    * pthread_rwlock_init()                   读写锁
    * int pthread_rwlock_rdlock()             给读上锁(会阻塞其他的给写上锁,读上锁不受影响,可并发运行)
    * int pthread_rwlock_wrlock()             给写上锁(会阻塞其他的给读写上锁)
    * int pthread_rwlock_unlock()             给读写解锁
    * int pthread_rwlock_destroy()            销毁互斥锁
    * int pthread_rwlock_tryrdlock()          给读上锁(参考互斥所)
    * int pthread_rwlock_trywrlock()          给写上锁
    
  • 信号量
    * sem_init()                  信号量的初始化(信号量的创建)
    * sem_destroy()               信号量的销毁
    * sem_wait()                  信号量资源-1,如果资源为0,则阻塞
    * sem_post()                  信号量资源+1
    * sem_trywait()               信号量资源-1,如果资源为0,则返回
    * sem_timerwait()             信号量资源-1,如果资源为0,则阻塞设置时长后解除阻塞。 (设置的时长是从1970.1.1到现在+需要设置的世界值)
    
  • 条件变量
    * pthread_cond_init()         条件变量的初始化
    * pthread_cond_destroy()      条件变量的销毁
    * pthread_cond_wait(condId,mutextId)         条件变量的阻塞函数,到这一句一定会阻塞于此并解开互斥锁,直到接收到唤醒信号才会解除阻塞
    * pthread_cond_signal()       条件变量的唤醒信号(至少唤醒一个)
    * pthread_cond_broadcast()    条件变量的唤醒信号(唤醒所有)