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

问题描述

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

解决过程

  我先是在线程A中加入了sleep方法,这样做的效果就是,比最初好一些,但是拿到锁还是要较长时间,后面考虑这种解决办法并不稳妥,因为线程如果追求高性能,那么sleep的办法来让出资源,感觉不太好。

  进一步排查代码发现,在拿到锁之后,一直到整个线程停止才释放锁,而我代码里使用到该数据的时间没有那么久。为了避免长时间持有锁,将获取锁和使用锁的代码放在一个独立的作用域中:

rust 复制代码
let A;
{
//获取锁
A=..  //将获取到的数据赋值
}

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

  欢迎交流~

相关推荐
魔镜前的帅比6 小时前
(开源项目)x-claw(总)
python·ai·rust·开源
Source.Liu10 小时前
【Uppsala】入口模块(lib.rs)
xml·rust
SomeB1oody10 小时前
【RustyML入门】2.6. 线性判别分析
开发语言·后端·机器学习·rust·教程
魔镜前的帅比13 小时前
(开源项目)x-claw (设计)
python·ai·rust·开源
Cicada12813 小时前
ccvt:一个用 Rust 写的中国地图坐标系互转命令行工具
开发语言·后端·rust
Source.Liu14 小时前
【Uppsala】介绍
xml·rust
程序员爱钓鱼19 小时前
Rust Clone详解:深拷贝、复制成本与正确使用方式
后端·面试·rust
seacracker20 小时前
一个 Rust 写的存储系统,想把 HPC 和 AI 的存储栈统一了
开发语言·人工智能·rust
lanfordxb1 天前
从 Markdown 到图片卡片:MarkCard Studio 的功能设计与官网实现记录
rust·软件工程·ai工具
yiqiefeimeng1 天前
Rust还是Go?编程语言的未来之争
rust·go·编程语言·技术社区·未来之争