news 2026/5/1 6:49:43

线程控制(同步相关)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
线程控制(同步相关)

一,定义及用途

1.概念

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

2.用途

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

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

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

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

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

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

信号量,适当可以有休眠,小的耗时操作。

用法: 计数信号量 。信号量的初值(3,5)是可以大于1的。 这种情况,用于互斥的情况,资源数本

身不唯一(多个资源)。

二,同步步骤及相关函数

1.步骤:

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

2.相关函数

1.信号量的定义:

sem_t sem

2.信号量的初始化:

int sem_init(sem_t *sem, int pshared, unsigned int value)

功能:将已经定义好的信号量赋值。

参数:sem: 要初始化的信号量

pshared = 0 :表示线程间使用信号量

!=0 :表示进程间使用信号量

value: 信号量的初始值,一般无名信号量 都是二值信号量,0 1

0 表示红灯,进程暂停阻塞

1 表示绿灯,进程可以通过执行。

返回值:成功 0;失败 -1

3.信号量的pv操作

P ===》申请资源===》申请一个二值信号量
V ===》释放资源===》释放一个二值信号量

P操作对应函数 ==》sem_wait();
V操作对应函数 ==》sem_post();

int sem_wait(sem_t *sem)

功能:判断当前sem信号量是否有资源可用。

如果sem有资源(==1),则申请该资源,程序继续运行

如果sem没有资源(==0),则线程阻塞等待,一旦有资源,则自动申请资源并继续运行程序。

注意:sem 申请资源后会自动执行 sem = sem - 1;

参数:sem 要判断的信号量资源

返回值:成功 0; 失败 -1

4.信号量的销毁

int sem_destroy(sem_t *sem)

功能:使用完毕将指定的信号量销毁
参数:sem要销毁的信号量
返回值:成功 0;失败 -1

三,死锁

1.概念

由于锁资源安排的不合理(锁资源的申请和释放逻辑不对),导致进程,线程无法正常继续执行(推

进)的现象。

2.产生条件

(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 6:05:55

C语言将无符号整数n变成成d进制表示的字符串s(附带源码)

一、项目背景详细介绍 在 C 语言及计算机基础课程中,数制转换是一个贯穿始终的重要知识点。从最底层的计算机存储到高层的软件开发,数值在不同进制之间的转换随处可见。 在实际编程中,我们经常遇到如下需求: 将十进制整数转换为…

作者头像 李华
网站建设 2026/4/10 8:13:51

C语言实现借记款项功能(附带源码)

一、项目背景详细介绍在现实生活中,借记(Debit) 是金融系统中最基本、最常见的操作之一。无论是:银行卡消费转账扣款账户余额减少贷款扣除系统费用扣减本质上都属于 “从账户中扣除一定金额” 的过程。在 C 语言教学与程序设计基础…

作者头像 李华
网站建设 2026/4/21 10:09:39

5分钟快速验证SCRAM认证兼容性方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个快速验证工具原型:1. 输入客户端支持的认证机制列表;2. 自动检测与服务器端的兼容性;3. 输出最优认证方案建议。要求:极简UI…

作者头像 李华
网站建设 2026/5/1 5:02:50

小程序python-uniapp基于Vue的“璘梦”问卷调查调研App设计和实现_xj1h0909

文章目录系统截图项目技术简介可行性分析主要运用技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统截图 小程序小程序python-uniappVueApp_xj 设计和实现的“璘梦”问卷调查调研基于python-uniapp…

作者头像 李华
网站建设 2026/4/30 13:17:25

用Go Mod快速构建微服务原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个微服务原型项目,包含2-3个简单服务,演示:1) 服务间依赖管理 2) 版本控制 3) 本地替换技巧。要求使用AI快速生成基础代码框架&#xff0c…

作者头像 李华