【发布时间】:2022-01-14 21:00:30
【问题描述】:
这样的代码会在 Rust 中使用 DashMap 产生死锁吗?
// snippet_1
let a = DashMap::new();
let b = DashMap::new();
// thread1
for v in a.iter(){
xxx
}
for v in b.iter(){
xxx
}
//thread2
for v in b.iter(){
xxx
}
for v in a.iter(){
xxx
}
// snippet_2
let a = DashMap::new();
let b = DashMap::new();
// thread1
for v in a.iter(){
xxx
}
for v in b.iter(){
xxx
}
//thread2
for v in b.iter(){
xxx
for v in a.iter() {
xxx
}
xxx
}
// snippet_3
let a = DashMap::new();
let b = DashMap::new();
// thread1
for v in a.iter(){
xxx
}
for v in b.iter(){
xxx
}
//thread2
for v in b.iter(){
xxx
let Some(v) = a.get_mut(key){
xxx
}
xxx
}
此外,在同一个线程中迭代时插入到 dashmap 会产生死锁。但是,从另一个线程插入 dashmap 不会产生死锁。这是真的吗?
【问题讨论】: