当前位置: 首页 > news >正文

LinuxC编程——线程

目录

  • 一、概念
  • 二、进程与线程的区别⭐⭐⭐
  • 三、线程资源
  • 四、函数接口
    • 4.1 线程创建
    • 4.2 线程退出
    • 4.3 线程回收
      • 4.3.1 阻塞回收
      • 4.3.2 非阻塞回收
    • 4.4 pthread_create之传参
    • 4.5 练习

一、概念

是一个轻量级的进程,为了提高系统的性能引入线程。
进程与线程都参与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结束程序。
在这里插入图片描述

http://www.lryc.cn/news/118189.html

相关文章:

  • 使用fetch调用fastapi接口(post)的实例
  • 探索规律:Python地图数据可视化艺术
  • Django-------自定义命令
  • 【Linux】在浏览器输入网址后发生了什么事情?
  • 推荐两本书《JavaRoadmap》、《JustCC》
  • 使用基于jvm-sandbox的对三层嵌套类型的改造
  • [HDLBits] Mt2015 q4b
  • C++:堆排序
  • Grafana Prometheus 通过JMX监控kafka
  • vue项目切换页面白屏不显示解决方案
  • Goland报错 : Try to open it externally to fix format problem
  • Python-OpenCV中的图像处理-几何变换
  • 前端JavaScript入门-day08-正则表达式
  • ML类CFAR检测器在不同环境中检测性能的分析
  • element-ui 路由动态加载功能
  • (学习笔记-进程管理)进程调度
  • 十分钟python入门 正则表达式
  • 关于数据拷贝赋值方法
  • Effective Java笔记(32)谨慎并用泛型和可变参数
  • 数据结构——双向链表
  • Declare 关键字在 TypeScript 中如何正确使用?
  • ChatGPT将会成为强者的外挂?—— 提高学习能力
  • AUTOSAR规范与ECU软件开发(基础篇)1.3 车用控制器软件标准(从OSEK到AUTOSAR)
  • R语言5_安装Giotto
  • centos按用户保存历史执行命令
  • 【力扣】61. 旋转链表 <快慢指针>
  • 编写一个指令(v-focus2end)使输入框文本在聚焦时焦点在文本最后一个位置
  • Virtualbox设置访问外网以及主机和虚拟机互通
  • 请简述React是什么?React的主要特点有哪些?React中有哪些主要组件?
  • DevOps最佳实践和工具在本地环境中的概述