当前位置: 首页 > news >正文

线程控制(互斥相关)

一,互斥

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; 失败 非零

http://www.cnnetsun.cn/news/116083.html

相关文章:

  • N-乙酰神经氨酸——连接生命与健康的“智慧糖链”核心组分 CAS:131-48-6
  • ZooKeeper:enableACL和requireClientSASLAuth
  • 为什么K8s 1.24 的容器时间调整会影响宿主机的时间啊?
  • AI时代核心竞争力:手写多智能体系统,不依赖LangChain/LlamaIndex
  • WebSocket 对比 MQTT通信优势
  • 基于springboot面料花型试衣系统
  • 域名被污染是什么意思?还能不能继续使用?
  • Python大数据基于深度学习的音乐推荐系统-250326--论文
  • Python大数据影评情感分析可视化及推荐系统的设计与实现_u5ck1y17_论文
  • AI Agent设计模式大揭秘:9种架构让你从编程小白变身架构师!
  • Python大数据基于Spark的南昌房价数据分析系统的设计与实现_45i0b357_论文
  • 9 个降AI率工具,自考人必备的降重神器!
  • 9 个降AI率工具,自考人必备!
  • 旅行记录应用新建旅行 - Cordova OpenHarmony 混合开发实战
  • 9 个降AI率工具推荐,继续教育学生必备
  • Java八股文(Java基础面试题)
  • 邦芒忠告:职场中没有好人缘的10种人
  • 基于Spring Boot人才招聘管理系统
  • 拒绝“魔法值”注入:手把手教你实现 Spring Boot 高性能枚举校验注解 @InEnum
  • 国内容易上手的claudecode一键配置指南
  • 复原IP地址
  • Redis 发布订阅
  • JQuery支持WebUploader完成百万文件断点续传的原理?
  • Vue3如何结合组件实现大文件分片的并行上传优化?
  • 类型分布统计-Cordovaopenharmony多维分析实战
  • 四时四名,一山万象:朝鲜金刚山的锦绣风姿
  • 基于Spring Boot的果蔬销售系统
  • Scala Collection(集合)
  • 介观交通流仿真软件:DynusT_(11).交通事件管理
  • django基于Python天气分析系统