线程相关知识梳理

时间:2024-02-15 19:52:27
  • 一、概念

        线程是轻量级的进程,被包含在进程之中,多个线程使用同一片进程空间。进程是操作系统资源分配的最小单位 ,线程是操作系统运算调度的最小单位。

  • 二、优/劣势

优势:解决了进程间切换耗费时间的问题,由于使用同一片内存空间,因此通信会更加简单(使用全局变量)。

劣势:由于线程共享同一片内存空间,因此会存在资源竞争的问题,可使用同步、互斥机制来解决,同步机制可以确保多个线程按照一定的顺序执行,而互斥机制可以保证在同一时间只有一个线程访问共享资源。

  • 三、线程公/私有数据

线程公有数据:全局变量、静态变量(static)、动态分配的内存(malloc);文件描述符(上限1024)。

线程私有数据:线程id号(tid)、堆栈(局部变量)、错误号。

  • 四、线程的使用

线程的调用属于外部库,在编译时需要链接库:

gcc   c语言源程序   -l   pthread

  • 五、线程相关函数

1、pthread_create:创建线程

 int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine)(void *),void *arg);

第一个参数:可获取线程id,是用于接收线程id的变量的地址;

第二个参数:通常用NULL表示创建的线程使用默认属性,是存储线程属性的结构体变量地址;

第三个参数:线程执行函数的入口地址(指针函数指针)指向返回值为void*类型,参数为void*类型的函数;

第四个参数:给线程执行函数传递的参数。

2、pthread_exit:退出线程

执行效果类似于return

3、pthread_join:阻塞等待指定线程退出

4、pthread_cancel:取消线程

可在不同线程中取消另一个线程

  • 六、线程间通信

       由于线程间使用同一片进程空间,因此通信过程实际上非常简单,使用全局变量进行数据的传递,多个线程可同时访问资源,同步、互斥两种机制用于解决访问共同资源时的问题。

  • 七、同步、互斥机制

同步:

        解决执行的顺序问题,使程序可以按照指定的顺序执行

        信号量机制:P-V+

        函数接口:

                sem_init:初始化信号量

                sem_wait:申请资源(P操作)

                sem_post:释放资源(V操作)

      使用一个信号量可能会出现供大于求的问题,因此应该使用两个信号量。

互斥:

       解决程序中临界资源的竞争问题

       函数接口:

               pthread_mutex_init:初始化互斥锁

               pthread_mutex_lock:申请互斥锁

               pthread_mutex_unlock:释放互斥锁