【发布时间】:2020-05-03 17:01:47
【问题描述】:
互斥量和线程示例 互联网不好,因为我无法找到如何使用互斥锁锁定代码块来锁定方法。
// mutex example
#include <iostream> // std::cout
#include <thread> // std::thread
#include <mutex> // std::mutex
std::mutex mtx; // mutex for critical section
void print_block (int n, char c) {
// critical section (exclusive access to std::cout signaled by locking mtx):
mtx.lock();
for (int i=0; i<n; ++i) { std::cout << c; }
std::cout << '\n';
mtx.unlock();
}
int main ()
{
std::thread th1 (print_block,50,'*');
std::thread th2 (print_block,50,'$');
th1.join();
th2.join();
return 0;
}
这个 C++ sn-p 的类似 Rust 代码是什么?在 Rust 示例中锁定循环和打印,互斥锁必须是那种类型,例如
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
let data = Arc::new(Mutex::new(vec![1u32, 2, 3]));
for i in 0..3 {
let data = data.clone();
thread::spawn(move || {
let mut data = data.lock().unwrap();
data[i] += 1;
});
}
thread::sleep_ms(50);
}
【问题讨论】:
-
这个 c++ sn-p 的 rust 类似代码,锁定循环和打印,如 rust 示例中的互斥锁必须是该类型的互斥锁,例如使用 std::sync::{Arc, Mutex};使用标准::线程; fn main() { 让数据 = Arc::new(Mutex::new(vec![1u32, 2, 3])); for i in 0..3 { let data = data.clone(); thread::spawn(move || { let mut data = data.lock().unwrap(); data[i] += 1; }); } 线程::sleep_ms(50); }
-
请edit您的问题添加问题。
-
@idclev463035818 完成
-
看来How can I lock the internals of my Rust data structure? 的答案可能会回答您的问题。如果没有,请edit您的问题来解释差异。否则,我们可以将此问题标记为已回答。
-
您在寻找
Stdout::lock吗?
标签: multithreading rust mutex