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

问题描述

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

解决过程

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

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

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

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

欢迎交流~

相关推荐
shimly12345640 分钟前
(done) 速通 rustlings(20) 错误处理1 --- 不涉及Traits
rust
shimly12345643 分钟前
(done) 速通 rustlings(19) Option
rust
@atweiwei1 小时前
rust所有权机制详解
开发语言·数据结构·后端·rust·内存·所有权
shimly1234561 小时前
(done) 速通 rustlings(24) 错误处理2 --- 涉及Traits
rust
shimly1234562 小时前
(done) 速通 rustlings(23) 特性 Traits
rust
shimly1234563 小时前
(done) 速通 rustlings(17) 哈希表
rust
shimly1234563 小时前
(done) 速通 rustlings(15) 字符串
rust
shimly1234564 小时前
(done) 速通 rustlings(22) 泛型
rust
yezipi耶不耶5 小时前
我在 RTMate 里使用的高并发连接管理利器: DashMap
websocket·rust
初恋叫萱萱10 小时前
深入解析 Rust + LLM 开发:手把手教你写一个 AI 运维助手
运维·人工智能·rust