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

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

问题描述

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

解决过程

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

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

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

  欢迎交流~

http://www.lryc.cn/news/247886.html

相关文章:

  • 【区块链】产品经理的NFT初探
  • 香港服务器减少延迟的几种方法
  • PowerShell命令小记
  • C语言小练
  • Webhook端口中的自签名身份验证
  • CSS预处理器(如Sass或Less):变量、嵌套规则和混合器等高级功能
  • 【Linux】Linux第一个小程序 --- 进度条
  • 每日一练:约瑟夫生者死者小游戏
  • 双指针算法(题目与答案讲解)
  • python服装电商系统vue购物商城django-pycharm毕业设计项目推荐
  • 数据治理技术:研究现状与数据规范
  • 一文彻底理解索引下推
  • Springboot3+vue3从0到1开发实战项目(一)
  • [字符串操作] 有年代的病历单
  • 怎么批量提取文件名字到Excel中?
  • QT搭建的Ros/librviz的GUI软件
  • Docker 概述与安装
  • JS作用域与作用域链
  • elmentui 查看大图组件 点击图片关闭弹窗方法
  • 蓝桥杯官网练习题(最长子序列)
  • Make sure that using this pseudorandom number generator is safe here.
  • 【C/C++】常见模拟题题解
  • TikTok 购物和直播的 5 个简单技巧
  • 神经网络中BN层简介及位置分析
  • BGP基础配置
  • 【开题报告】基于深度学习的驾驶员危险行为检测系统
  • Linux云服务器打包部署前端Vue项目
  • Egg.js中Cookie和Session
  • 与 PCIe 相比,CXL为何低延迟高带宽?
  • Vue 入门指南:从零开始学习 Vue 的基础知识