Linux多线程编程之线程控制

函数预览
  • pthread_t pthread_id;
  • int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg); //线程创建   thread指向存放创建线程的id attr设置创建线程的属性 start_routine新线程要执行的函数 arg传给start_routine的参数
  • int pthread_join(pthread_t thread,void **retval);//等待被join的线程终止,获得其退出码  
  • int pthread_detach(pthread_t thread);//设置线程为可分离
  • int pthread_cancel(pthread_t thread);//终止其他线程
  • void pthead_exit(void *retval);//终止自身线程


注意点
  • 编译链接时要加上-pthread
  • 所有函数成功返回0,错误返回错误码(错误码没有放在errno中)
  • 一个进程中的任意一个线程调用exit或_exit,整个进程中的所有线程都将终止
  • 默认情况下,新创建的线程是可结合的
  • 线程是可结合或者可分离的,一个可结合的线程能够被其他线程回收和终止,未回收之前,他的存储器资源(如栈)是不释放的;一个可分离的线程是不能够被其他线程回收和终止,他的存储器资源在他终止时由系统自动回收
  • 为了防止资源泄露,一个可结合的线程要么被其他进程显示的回收(调用pthread_join),要么通过调用pthread_detach分离
  • 调用pthread_join的线程,在被join的线程结束之前,该线程会被阻塞
  • return或pthread_exit的指针所指的内存单元必须为全局的或者malloc的(不能是栈上的),否则函数退出便不存在了

线程终止的三种方式(不影响其他进程)
  1. 在线程函数中调用return(不适用于主线程,主线程在main函数return相当于调用exit-->所有线程终止)
  2. 被其他线程终止(pthread_cancel)
  3. 自身调用pthread_exit终止自己






你可能感兴趣的:(多线程知识点)