C语言之线程学习

1. 线程调用函数中使用pthread_self() 获取线程ID,而不是通过pthread_create() 的第一个参数tidp获取线程ID?

   受编译器的影响,pthread_create返回的tidp可能在执行线程函数之后返回,从而线程函数获取的tidp不存在。

2. 使用pthread_join 获取线程退出的参数时,需要保证退出的内存没有被改变或者内存回收(参数是全局、静态、malloc或常量)

3. pthread_cancel和pthread_exit 会调用POP函数

    pthread_cancel 属于线程取消其他线程的函数,并不等待线程终止,仅仅发送请求

    pthread_exit 为本线程的退出函数

    pthread_join 可获取线程退出的状态

    pthread_detach 线程分离,防止pthread_join堵住线程。使用线程分离,线程退出后自动回收资源,而不是等进程结束后回去,当然不可用pthread_join获取线程退出的状态

4. 读写锁:读任务远大于写任务时,读写锁的性能体现更多明显

    互斥锁:死锁-当线程1锁住任务a,获取任务b,而线程2锁住任务b,获取任务a,此时将出现死锁的情况

    条件变量:条件变量和互斥结合使用,允许线程以无竞争的方式等待特定事件的发生。互斥锁是为了保护此条件,如果此条件一定满足,则释放互斥锁;如果不满足,则一直锁住该条件。

  1 for(;;)
  2 {
  3     pthread_mutex_lock(&qlock);
  4     while (workq == NULL)
  5     {
  6         pthread_cond_wait(&qready, &qlock);
  7     }
  8     pthread_mutex_unlock(&qlock);
  9 }   
 10 
 11 pthread_cond_signal(&qready);

  



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值