LinuxC编程——线程

目录

一、概念

是一个轻量级的进程,为了提高系统的性能引入线程。

进程与线程都参与cpu的统一调度。

在同一进程中创建的所有线程共享该进程的地址空间

二、进程与线程的区别⭐⭐⭐

  • 相同点
    都为操作系统提供了 并发 执行能力
  • 不同点
    1. 调度和资源
      线程是系统调度的最小单位,进程是资源分配的最小单位;同一个进程创建的多个线程共享进程的资源;
    2. 地址空间方面
      进程的地址空间相互独立;在同一进程中创建的所有线程共享该进程的地址空间
    3. 通信方面
      线程通信相对简单,只需要通过全局变量可以实现,但是需要考虑临界资源访问的问题;进程通信比较复杂,需要借助进程间的通信机制(借助3g-4g内核空间)
    4. 安全性方面
      线程安全性差一些,当进程结束时会导致所有线程退出;进程相对安全

三、线程资源

  1. 共享的资源
    可执行的指令、静态数据、进程中打开的文件描述符、信号处理函数、当前工作目录、用户ID、用户组ID
  2. 私有的资源
    线程ID (TID)、PC(程序计数器)和相关寄存器、堆栈、错误号 (errno)、信号掩码和优先级、执行状态和属性

四、函数接口

4.1 线程创建

pthread_create:

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

  • 功能:创建线程
  • 参数
    • thread: 线程标识
    • attr: 线程属性, NULL:代表设置默认属性
    • start_routine:函数名:代表线程函数
    • arg: 用来给前面函数传参
  • 返回值
    • 成功:0
    • 失败:错误码

4.2 线程退出

pthread_exit:

int pthread_exit(void *value_ptr)

  • 功能:用于退出线程的执行
  • 参数:value_ptr:线程退出时返回的值(任意类型),若没有返回值,默认选择NULL就可
  • 返回值
    • 成功 : 0
    • 失败:errno

4.3 线程回收

4.3.1 阻塞回收

pthread_join:

int pthread_join(pthread_t thread, void **value_ptr)

  • 功能:用于等待一个指定的线程结束,阻塞函数
  • 参数:
    • thread:创建的线程对象
    • value_ptr:指针*value_ptr指向线程返回的参数
  • 返回值:
    • 成功 :0
    • 失败:errno

4.3.2 非阻塞回收

pthread_detach:

int pthread_detach(pthread_t thread);

  • 功能:让线程结束时自动回收线程资源,让线程和主线程分离
  • 参数:thread(线程ID)

例子:

pthread_detach:👉百度百科链接

4.4 pthread_create之传参

4.5 练习

通过线程实现数据的交互,主线程循环从终端输入,线程函数将数据循环输出,当输入quit结束程序。

相关推荐
##echo28 分钟前
嵌入式Linux裸机开发笔记9(IMX6ULL)GPIO 中断实验(1)
linux·c语言·笔记·单片机·嵌入式硬件
Reggie_L35 分钟前
RabbiteMQ安装-ubuntu
linux·ubuntu·ruby
扶摇直上——————1 小时前
C专题8:文件操作2
c语言·文件操作
AIGC_北苏1 小时前
让UV管理一切!!!
linux·人工智能·uv
YCY^v^3 小时前
centos 7 开启80,443端口,怎么弄?
linux·运维·centos
北南京海3 小时前
[Linux]进程地址空间
linux·运维·服务器
我爱学嵌入式3 小时前
C语言第 9 天学习笔记:数组(二维数组与字符数组)
c语言·笔记·学习
db_murphy5 小时前
Oracle数据块8KB、OS默认认块管理4KB,是否需调整大小为一致?
linux
RA生态工作室7 小时前
瑞萨电子RA-T MCU系列新成员RA2T1——电机控制专家
嵌入式开发·电机控制·电机芯片
mCell8 小时前
从删库到跑路?这50个Linux命令能保你职业生涯
linux·windows·macos