news 2026/4/18 13:12:39

线程控制(互斥相关)

作者头像

张小明

前端开发工程师

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

一,互斥

1.概念

(1)互斥:在多线程中对临界资源的排他性访问。

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

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

2.用途

问题:

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

如果A++,这个指令翻译成汇编是3句(至少)。在一次线程的调度,这3句汇编,不一定一次性执

行。也就是说可呢个th1 执行了 1,2步,就切换到th2 执行。这个时候就会发生错误(数据的一致行

性出现问题)。

解决方案:

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

相关函数:

1.定义

pthread_mutex_t mutex;

2.初始化锁

int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *attr)

功能:将已经定义好的互斥锁初始化。

参数:mutex 要初始化的互斥锁

atrr 初始化的值,一般是NULL表示默认锁

返回值:成功 0 ;失败 非零

3.加锁

int pthread_mutex_lock(pthread_mutex_t *mutex)

功能:用指定的互斥锁开始加锁代码

加锁后的代码到解锁部分的代码属于原子操作;

在加锁期间其他进程/线程都不能操作该部分代码;

如果该函数在执行的时候,mutex已经被其他部分使用则代码阻塞。

参数: mutex 用来给代码加锁的互斥锁

返回值:成功 0 ;失败 非零

原子操作: 在线程的一次调度中,这段代码必须完成,不能发生线程调度。

4.解锁

int pthread_mutex_unlock(pthread_mutex_t *mutex)

功能:将指定的互斥锁解锁。

解锁之后代码不再排他访问,一般加锁解锁同时出现。

参数:用来解锁的互斥锁

返回值:成功 0; 失败 非零

5.销毁

int pthread_mutex_destroy(pthread_mutex_t *mutex)

功能:使用互斥锁完毕后需要销毁互斥锁

参数:mutex 要销毁的互斥锁

返回值:成功 0; 失败 非零

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

【必藏】后端工程师转行AI大模型开发全攻略:从零基础到高薪工程师的技能路径与学习资料免费分享

文章指出随着DeepSeek等AI大模型爆火,AI大模型工程化开发需求旺盛,后端工程师有转行机会。文章详细列出了AI大模型应用开发所需的技能条件,包括Python、深度学习框架、transformer、训练部署流程、RAG和AI Agent技术等。强调最先掌握AI技术的…

作者头像 李华
网站建设 2026/4/17 20:47:33

【必收藏】RAG 2.0进阶指南:九种高级文本分块策略详解与实战案例

文章系统介绍RAG系统中的九种高级文本分块策略,包括滑动窗口、自适应、实体、主题、混合、任务感知、HTML/XML标签、代码专用和正则表达式切分。每种策略提供适用场景、实现步骤和具体案例,帮助读者根据不同应用选择最优方案,提高检索准确性和…

作者头像 李华
网站建设 2026/4/18 11:56:31

gdb调试

https://blog.51cto.com/u_6526235/7273590

作者头像 李华
网站建设 2026/4/18 8:39:16

数字员工与熊猫智汇是什么?主要具备哪些智能化特性?

数字员工通过应用AI销冠系统,显著优化了企业的业务流程,从而实现了成本降低和效率提升。首先,数字员工能够自动化处理大量客户沟通任务,通过高效的自动外呼功能,使得公司能够在短时间内完成大规模的客户联系&#xff0…

作者头像 李华