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

阅读更多

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)