欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux C/C++ 學習報告(一)

程序员文章站 2022-03-06 22:47:03
...

A.關於線程調用的總結:

     A1:線程結束時的釋放

1.linux线程执行和windows不同,pthread有两种状态joinable状态和unjoinable状态,如果线程是joinable状态,当线程函数自己返回退出时或pthread_exit时都不会释放线程所占用堆栈和线程描述符(总计8K多)。只有当你调用了pthread_join之后这些资源才会被释放。若是unjoinable状态的线程,这些资源在线程函数退出时或pthread_exit时自动会被释放。

2.unjoinable属性可以在pthread_create时指定,或在线程创建后在线程中pthread_detach自己, 如:pthread_detach(pthread_self()),将状态改为unjoinable状态,确保资源的释放。或者将线程置为 joinable,然后适时调用pthread_join.

3.其实简单的说就是在线程函数头加上 pthread_detach(pthread_self())的话,线程状态改变,在函数尾部直接 pthread_exit线程就会自动退出。省去了给线程擦屁股的麻烦。

 

Example:

     

void *checkNetworkState(void *argv){
  int detachCode = pthread_detach(pthread_self());// 将状态改为unjoinable状态,确保资源的释放
  printf("checkNetworkState thread: detachCode = %d\n", detachCode);
  ......

  pthread_exit(0);
  return 0;
}

     

 

B.在C/C++ 中實現線程阻塞的方式:
         

{    
      struct timeval tv;
      tv.tv_sec = 0;
      tv.tv_usec = 200*1000;
      select(0, NULL, NULL, NULL, &tv);
}

    使用sleep(unsigned int seconds)会令目前的进程暂停,直到达到参数seconds 所指定的时间,或是被信号所中断.一般函數裏不推薦使用。

相关标签: Thread