Multithreading 这个C++互斥代码的锈等效代码
上的互斥和线程示例 互联网不好,因为我无法找到如何使用互斥锁锁定方法来锁定代码块 //互斥示例 include//std::cout include//std::thread include//std::mutex std::mutex mtx;//临界区互斥 无效打印块整数n,字符c{ //通过锁定mtx发出的对std::cout的关键区段独占访问信号: mtx.lock;Multithreading 这个C++互斥代码的锈等效代码,multithreading,rust,mutex,Multithreading,Rust,Mutex,上的互斥和线程示例 互联网不好,因为我无法找到如何使用互斥锁锁定方法来锁定代码块 //互斥示例 include//std::cout include//std::thread include//std::mutex std::mutex mtx;//临界区互斥 无效打印块整数n,字符c{ //通过锁定mtx发出的对std::cout的关键区段独占访问信号: mtx.lock; 对于int i=0;i我已经编写了类似的代码。它很好还是可以用更好的方式编写 use std::sync::{Arc,
对于int i=0;i我已经编写了类似的代码。它很好还是可以用更好的方式编写
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
let mtx = Arc::new(Mutex::new(""));
let mtx1 = mtx.clone();
let mtx2 = mtx.clone();
let n = 50;
let th1 = thread::spawn(move || {
mtx1.lock().unwrap();
printData(n, "*".to_string());
});
let th2 = thread::spawn(move || {
mtx2.lock().unwrap();
printData(n, "$".to_string());
});
th1.join();
th2.join();
}
fn printData(n: u32, c: String) {
let mut str_val: String = "".to_string();
for i in 0..n {
str_val.push_str(&c);
}
println!("{}", str_val);
}
对于这个C++代码片段,将是类似于生锈的代码,如RISD例子中的锁环和打印,互斥体必须是这样的类型,例如使用STD::{弧:Mutex };使用STD::线程;FN main {让数据=ARC::NeMuteX::NeWVEC![1u32,2, 3 ];对于i,在0…3中,让DATA = DATA克隆;线程::{let mut data=data.lock.unwrap;data[i]+=1;};}线程::sleep_ms50;}请回答您的问题以添加该问题。@idclev463035818 doneIt看起来您的问题可能由的答案回答。如果不是,请您的问题解释差异。否则,我们可以将此问题标记为已回答。您在寻找吗?当您需要不保护任何东西的锁时,您可以使用aka单元类型g、 对于工作代码的审查,有
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
let mtx = Arc::new(Mutex::new(""));
let mtx1 = mtx.clone();
let mtx2 = mtx.clone();
let n = 50;
let th1 = thread::spawn(move || {
mtx1.lock().unwrap();
printData(n, "*".to_string());
});
let th2 = thread::spawn(move || {
mtx2.lock().unwrap();
printData(n, "$".to_string());
});
th1.join();
th2.join();
}
fn printData(n: u32, c: String) {
let mut str_val: String = "".to_string();
for i in 0..n {
str_val.push_str(&c);
}
println!("{}", str_val);
}