Linux系统编程之线程一(线程的创建)

      线程(thread)与进程类似,但是创建一个线程是进程的10倍甚至更多,一个进程可以包括多个线程,多线程可以执行多个任务,且每个线程之间都可以执行独立的任务。

注意:线程之间是共享同一个全局内存区域的,包括数据段,堆,栈;同时还包括一下内容:

  • 1:进程的ID;
  • 2:控制终端;
  • 3:用户ID和组ID;
  • 4:打开的文件描述符;
  • 5:资源限制;
  • 6:间隔定时器(setitimer())和POSIX定时器(timer_create();
  • 7:信号处置;

             线程数据类型:

pthread_t 线程ID
pthread_mutex_t 互斥对线
pthread_mutexattr_t 互斥属性对象
pthread_cond_t 条件变量
pthread_condattr_t 条件变量的属性对象
pthread_attr_t 线程的属性对象

线程创建:

#include<pthread.h>

int  pthread_create((pthread_t  *thread,  pthread_attr_t  *attr,  void  *(*start)(void  *),  void  *arg)

参数thread:线程id

attr: 线程属性设置

第三个参数:线程处理函数

arg:传递给线程处理函数的参数(任意对象类型的指针传递给start()函数,也可设置为空)

返回值不为0时,代表创建线程失败。
————————————————
 

线程终止:

  • 线程执行函数start执行return语句结束;
  • 线程调用pthread_exit()函数退出;//---》pthread_exit()终止线程,返回值可以由另一线程通过pthread_join()来获取

     void pthread_exit(void *retval)

  • 调用pthread_cancel()取消线程
  • 任意线程调用exit(), 终止所有线程;

线程ID可以同过pthread_self()来获取;

线程连接函数

     int pthread_join(pthread_t thread, void **retval);

--retval如果不为NULL, 则为return或pthread_exit()所指定的值

线程结束后必须释放其线程资源,如果没有主动释放线程资源,等待系统自动回收, 可能会造成创建新线程失败。

pthread_join()函数会阻塞等待线程结束,然后才会释放线程资源,防止产生僵尸线程。

也可以使用在线程执行函数种添加pthread_detach(pthread_self())自行分离函数,通常使用第二种。

猜你喜欢

转载自blog.csdn.net/huang422600/article/details/103518542