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

Rust多线程任务,发现有些线程一直获取不到锁【已解决】

问题描述

  项目中用到rust,其中在多线程中用到了同一个对象的锁,然而发现其中一个线程一直拿不到这个锁。

解决过程

  我先是在线程A中加入了sleep方法,这样做的效果就是,比最初好一些,但是拿到锁还是要较长时间,后面考虑这种解决办法并不稳妥,因为线程如果追求高性能,那么sleep的办法来让出资源,感觉不太好。
  进一步排查代码发现,在拿到锁之后,一直到整个线程停止才释放锁,而我代码里使用到该数据的时间没有那么久。为了避免长时间持有锁,将获取锁和使用锁的代码放在一个独立的作用域中:

let A;
{
//获取锁
A=..  //将获取到的数据赋值
}

  这样在离开该作用域时,锁会自动被释放,我们可以在作用域中将锁内数据取出,然后克隆一份使用。

  欢迎交流~


http://www.kler.cn/news/155514.html

相关文章:

  • 设计模式-结构型模式之装饰者设计模式
  • vscode配置代码片段
  • 吴恩达《机器学习》11-1-11-2:首先要做什么、误差分析
  • Ubuntu Linux玩童年小霸王插卡游戏
  • [MySQL]日期和时间函数
  • [Rust] 可迭代类型, 迭代器, 如何正确的创建自定义可迭代类型
  • 安防视频监控/磁盘阵列/集中云存储平台EasyCVR设备录像保活不生效原因是什么?该如何解决?
  • jdk1.8 hashmap源码阅读
  • 轻易云AI:引领企业数智化转型提升企业AI效率
  • python查询、处理、批量存入数据
  • navicat某些表为什么不按主键排序
  • linux设置主机名
  • Java研学-配置文件
  • 算法设计与实现--贪心篇
  • Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(一)
  • “B2B+OMS方案”,赋能家电巨头构建BC订单一体化能力,促进业务增长|徐礼昭
  • 决策 Diffie-Hellman DDH 和 CDH
  • 在Springboot中操作Redis——五大数据类型
  • Python标准库:copy模块【侯小啾python领航班系列(十五)】
  • 【Java进阶】-- 设计模式
  • 关于数据劫持原理(vue2和vue3)
  • IDEA2022 Git 回滚及回滚内容恢复
  • 关于我离破500粉丝感受
  • PHP:js中怎么使用PHP变量,php变量为数组时的处理
  • 分享84个节日PPT,总有一款适合您
  • 高光谱遥感影像分类项目开源
  • 前端请求patch接口,只传入已修改字段值的字段
  • Matlab下载许可证文件 教程(在账号有许可证的前提下)
  • C语言速通笔记(1-40)
  • JavaWeb(三)