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

问题描述

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

解决过程

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

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

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

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

欢迎交流~

相关推荐
逻极3 小时前
Rust流程控制(上):if_else与match模式匹配
开发语言·后端·rust
小雨下雨的雨3 小时前
Rust专项——其他集合类型详解:BTreeMap、VecDeque、BinaryHeap
开发语言·后端·rust
chian-ocean5 小时前
双向链表的“链”与“殇”——Rust LinkedList 的深度剖析、实战与再思考
数据结构·链表·rust
Python私教6 小时前
Rust 编程语言基础知识全面介绍
开发语言·后端·rust
七月稻草人7 小时前
Rust 与数据库连接池的集成:安全与性能的深度耦合
数据库·安全·rust
逻极11 小时前
Rust之旅的起点:为什么选择Rust?
开发语言·后端·rust
脑子不好的小菜鸟14 小时前
深入剖析 Rust `HashMap`:安全哈希 (SipHash) 与高性能冲突处理 (Swiss Table)
安全·rust·哈希算法
人工智能的苟富贵20 小时前
Rust 异步编程实践:用 Tokio 实现一个迷你 HTTP 服务
ubuntu·http·rust
极限实验室20 小时前
搜索百科(6):Meilisearch — Rust 打造的轻量级搜索新锐
搜索引擎·rust
工藤学编程1 天前
深入Rust:Tokio多线程调度架构的原理、实践与性能优化
性能优化·架构·rust