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结束程序。

相关推荐
qiqiqi(^_×)5 分钟前
解决linux‘打开readme.md文件pycharm闪退’问题
linux·运维·pycharm
范纹杉想快点毕业33 分钟前
单片机开发中的队列数据结构详解,队列数据结构在单片机软件开发中的应用详解,C语言
c语言·数据库·stm32·单片机·嵌入式硬件·mongodb·fpga开发
He BianGu2 小时前
【笔记】介绍 WPF XAML 中 Binding 的 StringFormat详细功能
笔记·wpf
Rousson2 小时前
硬件学习笔记--78 MCU复位电路简介
笔记·学习
坚持编程的菜鸟2 小时前
LeetCode每日一题——有效的字母异位词
c语言·算法·leetcode
小糖学代码2 小时前
STL的list模拟实现(带移动构造和emplace版本)
c语言·数据结构·c++·windows·list
一人の梅雨2 小时前
淘宝店铺全量商品接口深度开发:从分页优化到数据完整性保障
linux·windows·microsoft
王嘉俊9253 小时前
Qt 入门:构建跨平台 GUI 应用的强大框架
c语言·开发语言·c++·qt·入门·cpp
Voyager_43 小时前
Linux服务器NAS挂载:Truenas
linux·运维·服务器
liujing102329293 小时前
Day01_Linux移植基础
linux·运维·服务器