我正在学习 Rust 并且没有线程经验。我正在学习 Rustlings 课程并且我已经解决了这个threads1.rs练习,但我不明白为什么我的Mutex结构不需要被取消引用。
use std::sync::{Arc, Mutex};
use std::thread;
use std::time::Duration;
struct JobStatus {
jobs_completed: u32,
}
fn main() {
let status = Arc::new(Mutex::new(JobStatus { jobs_completed: 0 }));
let status_shared = Arc::clone(&status);
thread::spawn(move || {
for _ in 0..10 {
thread::sleep(Duration::from_millis(250));
let mut status_shared = status_shared.lock().unwrap();
status_shared.jobs_completed += 1; // why not *status_shared?
}
});
let mut jobs_completed: u32;
loop {
jobs_completed = status.lock().unwrap().jobs_completed;
if jobs_completed < 10 {
println!("waiting... ({} jobs done)", jobs_completed);
thread::sleep(Duration::from_millis(500));
} else {
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据本书的第 16.3 章,我原以为需要分配给
*status_shared.jobs_completed
Run Code Online (Sandbox Code Playgroud)
为了获得该jobs_completed领域,但生成错误:
error[E0614]: type `u32` cannot be dereferenced
--> src/main.rs:16:13
|
16 | *status_shared.jobs_completed += 1;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
这本书给出了一个简单类型的指针和上面的代码给出了一个结构体的引用有区别吗?
| 归档时间: |
|
| 查看次数: |
1111 次 |
| 最近记录: |