Linux-线程控制

一、互斥

1. 概念

在多线程中对临界资源的排他性访问。

临界资源:在多线程中,会对这个资源进行读写操作的。如:全局变量、文件、设备。

排他访问:在多线程中,只能有一个线程进行读写操作的。

2. 用途

在多线程中,一个资源同一时刻,只能有一个线程访问

th1, th2, 是两个线程,是并发运行。也就是代码在运行时,是穿插进行的。

如果A++,这个指令翻译成汇编是3句(至少)。在一次线程的调度,这3句汇编,不一定一次性执行。也就是说可能 th1 执行了 1,2步,就切换到th2 执行。这个时候就会发生错误(数据的一致行性出现问题)。

解决方案,使用互斥。

3. 互斥的使用步骤

定义互斥锁 ==》 初始化锁 ==》 加锁 ==》 解锁 ==》 销毁

4. 相关函数

二、同步

1. 概念

有一定先后顺序的对资源的排他性访问。

2. 用途

在多线程中,线程按照一定顺序运行。

3. 与互斥锁的关系和区别

互斥包含同步,同步是互斥的一个特例

1)互斥锁,加锁和解锁 是同一个线程

信号量(同步),th1 释放th2, th2释放th1. 是由线程交叉释放。

2)在互斥锁保护的代码中(临界区)。不要休眠,不要大耗时的操作。临界区代码要短小精悍

信号量,适当可以有休眠(当初值不为1的时候,休眠有时候时设计的样子),小的耗时操作。

3)用法: 计数信号量 。信号量的初值(3,5)是可以大于1的。

这种情况,用于互斥的情况,资源数本身不唯一(多个资源)

4. 同步的使用步骤

信号量的定义 =》 信号量的初始化 ==》 信号量的PV操作 =》 信号量的销毁。

5. 相关函数

6. 死锁

由于锁资源安排的不合理(锁资源的申请和释放逻辑不对)

导致进程,线程无法正常继续执行(推进)的现象。

相关推荐
Android系统攻城狮1 小时前
Linux FFmpeg深度解析之avcodec_find_decoder调用流程与实战(十二)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
小白的码BUG之路1 小时前
K8s -- 启动一主二从节点
linux·运维·服务器
Escalating_xu1 小时前
【Linux 网络编程】IP 分片与重组:3000 字节的数据报,怎样拆开又拼回来?
linux·网络·tcp/ip
小相会自律2 小时前
全平台远程控制软件推荐2026:Win/Mac/Linux/手机/鸿蒙互通哪款好
linux·macos·智能手机·todesk·teamviewer·向日葵
风娜2 小时前
【Linux网络】UDP 服务器怎么写?从 socket、bind 到 recvfrom/sendto,手写完整回显服务器
linux·服务器·网络
静以修身zzz2 小时前
OpenStack对象存储-Swift、OpenStack编排管理-heat、OpenStack网络管理-neutron
linux·运维·服务器·架构·openstack·swift
一技安身2 小时前
MySQL 8.4.13 LTS 通用二进制包(Linux免安装版)完整教程
linux·mysql·adb
迷途之人不知返2 小时前
【动态库与静态库】-3-静态链接与加载
linux
明天也要努力学习2 小时前
深入理解 JVM 垃圾回收(GC)
java·jvm
铁链鞭策大师2 小时前
jvm基础
jvm