linux相关的知识记录

1、linux线程,有joinable和detachable两种,默认构造的时候就是第一种的。达到

       如果线程是joinable状态,当线程函数自己返回退出时或pthread_exit时都不会释放线程所占用堆栈和线程描述符(根据平台不同,使用内存也不一样)。只有当你调用了          pthread_join之后这些资源才会被释放。若是unjoinable状态的线程,这些资源在线程函数退出时或pthread_exit时自动会被释放。


     可以在创建线程的时候就设置为unjoinable,如下:

      pthread_attr_init (&attr);
      pthread_attr_setdetachstat(&attr, PTHREAD_CREATE_DETACHED);
      pthread_create (&thread, &attr, &thread_function, NULL);

     这样你的线程函数执行完或者执行pthread_exit强制退出线程后,线程的堆栈等资源会自动释放。

    或者还可以这样,在线程函数里面开始的时候就执行pthread_detach(pthread_self()),其实就是修改线程为unjoinable,这样就和上面的类似了。

    对于joinable的线程,要调用pthread_join(),这样资源才会释放。


    思考过一个问题,就是线程函数里面return和pthread_exit有啥区别,网上搜索过很久说是pthread_exit会做一些线程的后期清理什么的功能,所以在线程函数里面还是用pthread_exit来退出线程吧。

   另外,在设置线程堆栈的时候,别设置太小了,设置太小了满足不了线程函数里面所需要的内存大小会崩溃的,我就遇见过一次,我在线程函数里面进行aac编码,线程堆栈太小导致崩溃了。

  

2、同步与唤醒

  初始化:

   static pthread_mutex_t g_mut = PTHREAD_MUTEX_INITIALIZER;
   static pthread_cond_t  g_cond = PTHREAD_COND_INITIALIZER;

   pthread_mutex_init(&g_mut, NULL) 
   pthread_cond_init(&g_cond, NULL) 


   等待条件成立,条件变量要与互斥锁搭配使用。

    pthread_mutex_lock(&g_mut);

    //这个while要特别说明一下,单个pthread_cond_wait功能很完善,为何  
            //这里要有一个while (!m_bFrontLoginComplete)呢?因为pthread_cond_wait里的线  
            //程可能会被意外唤醒,如果这个时候!m_bFrontLoginComplete,则不是我们想要的情况。  
            //这个时候,应该让线程继续进入pthread_cond_wait  
            // pthread_cond_wait会先解除之前的pthread_mutex_lock锁定的mtx,  
            //然后阻塞在等待对列里休眠,直到再次被唤醒(大多数情况下是等待的条件成立  
            //而被唤醒,唤醒后,该进程会先锁定先pthread_mutex_lock(&mtx);,再读取资源  
            //用这个流程是比较清楚的  
     while(!m_bFrontLoginComplete) 等待这个条件被另外一个线程唤醒,
      {
          pthread_cond_wait(&g_cond, &g_mut);
      }
      pthread_mutex_unlock(&g_mut);

   

     唤醒等待线程

    pthread_mutex_lock(&g_mut);
    m_bFrontLoginComplete = true; 此条件成立了,则唤醒等待的线程。
    pthread_cond_signal(&g_cond);
     pthread_mutex_unlock(&g_mut);


   记录几个参考的博客和链接如下:

   http://blog.csdn.net/zjc156m/article/details/9028643
   http://blog.csdn.net/zsf8701/article/details/7844316
   https://zhidao.baidu.com/question/425347880806900412.html
   http://blog.csdn.net/waldmer/article/details/23422943

  差不多就是这样的流程吧。暂时记录一些linux线程常用的知识点,后续需要继续补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值