嵌入式学习——Linux高级编程复习(线程)——day40

1. 线程

1.1 定义

    线程是一个轻量级的进程
    是一个任务被创建、调度、消亡的过程

1.2 线程和进程的区别与联系

    1. 线程是CPU任务调度的最小单元
    2. 进程是操作系统资源分配的最小单元
    3. 线程(Thread)是操作系统能够进行运算调度的最小单位,它是程序执行流的最小单元,也是进程内的实际运作单位。线程被包含在进程之中,一个进程可以包含一个或多个线程,每个线程代表进程中的一个执行路径,能够并发或并行执行不同的任务。    

1.3 线程的创建

        1. 进程的创建:文本段、数据段、系统数据段、内核

        2. 线程的创建:栈区独立,其余区域与进程共享

        3. 进程中的所有线程

                    独享:栈区——局部变量、
                    共享:文本段、数据段、堆区——全局变量/静态变量/字符串常量/malloc空间/代码 

1.4 线程的调度

        宏观并行、微观串行

1.5 多线程和多进程的优缺点

        1. 执行效率

                多线程 > 多进程 
                1.多线程只需在同一进程空间内部切换调度任务
                2.多进程需要在不同进程空间来回切换调度任务

        2. 安全性

                多进程 > 多线程 
                1.多进程各自独立,一个进程异常结束,不会影响其余进程 
                2.多线程都在同一进程空间内部,一个线程异常结束,导致进程异常结束,
                   进程中其余所有线程均会结束 

        3. 通信能力

                多线程 > 多进程 
                1.多线程可以利用共享空间实现任务通信 
                2.多进程没有共享空间,所以通信方式比较复杂        

        4. 通信安全性

                多进程 > 多线程 
                1.多进程没有共享空间,依赖第三方对象完成通信,中间不涉及资源竞争问题 
                2.多线程有共享空间,多个任务通信会产生资源竞争,需要加锁 

2. 线程相关函数接口

        对标进程函数接口

            1.fork         pthread_create
            2.exit          pthread_exit
            3.wait         pthread_join 
            4.getpid      pthread_self

2.1 pthread_create

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.2 pthread_self

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.3 pthread_exit

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.4pthread_cancel

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.5 pthread_join

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.6 pthread_attr_init

        1. 定义

        2. 功能

                初始化线程属性为默认属性                

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.7 pthread_attr_setdetachstate

        1. 定义

        2. 功能

                设置线程的属性

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.8 pthread_attr_destroy

        1. 定义

        2. 功能

                销毁线程属性

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

3. 互斥锁

3.1 引用互斥锁的原因:利用全局变量能够实现两个线程任务通信,线程任务通信操作全局变量可能会引发资源竞争,为避免资源竞争,引入互斥锁机制

3.2 定义

        互斥锁可以理解为是一种资源,一旦互斥锁被加锁,另外的线程任务无法继续加锁,必须等待互斥锁被解锁,另外的任务才能加锁

3.3 临界资源(临界区)

          加锁和解锁中间的代码(资源)称为临界资源(临界区),同一时刻,临界资源不能被同时执行

4. 互斥锁相关函数接口

4.1  pthread_mutex_init

        1. 定义

        2. 功能

                    初始化一个互斥锁 

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

4.2  pthread_mutex_lock

        1. 定义

        2. 功能

                    上锁

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

4.3  pthread_mutex_unlockk

        1. 定义

        2. 功能

                解锁

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

4.4  pthread_mutex_destroy

        1. 定义

        2. 功能

                销毁锁资源

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

相关推荐

  1. 嵌入Linux下的多线编程

    2024-06-09 21:34:05       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-09 21:34:05       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-09 21:34:05       5 阅读
  3. 在Django里面运行非项目文件

    2024-06-09 21:34:05       4 阅读
  4. Python语言-面向对象

    2024-06-09 21:34:05       5 阅读

热门阅读

  1. Websocket前端传参:深度解析与实战应用

    2024-06-09 21:34:05       16 阅读
  2. C语言:指针(函数回调)

    2024-06-09 21:34:05       16 阅读
  3. 【人工智能】AI绘画工具基本介绍

    2024-06-09 21:34:05       16 阅读
  4. 通俗易懂分析Docker中镜像和容器

    2024-06-09 21:34:05       15 阅读
  5. C++单例模式

    2024-06-09 21:34:05       12 阅读
  6. 语音合成

    2024-06-09 21:34:05       15 阅读
  7. 单链表的实现

    2024-06-09 21:34:05       16 阅读
  8. Jupyter | 如何在Jupyter应用中添加、删除虚拟环境

    2024-06-09 21:34:05       13 阅读
  9. Apache Doris 2.0.11 版本正式发布

    2024-06-09 21:34:05       14 阅读
  10. IntelliJ IDEA安装

    2024-06-09 21:34:05       14 阅读
  11. OnlyOwner在Solidity中是一个修饰符,TypeError:

    2024-06-09 21:34:05       14 阅读
  12. 【C/C++】C语言实现std::move

    2024-06-09 21:34:05       15 阅读