请大佬帮忙把一段之前golang实现的并发读写代码用rust实现
package mainimport ( "fmt" "sync" "time")type Rule struct { Id int64 Words []string}type Repo struct { Version int64 rwLock sync.RWMutex Rules []*Rule}func main() { r0 := Rule{ Id: 0, Words: []string{"a", "b", "c"}, } r1 := Rule{ Id: 1, Words: []string{"0", "1", "2"}, } repo := Repo{ Version: 0, Rules: []*Rule{ &r0, &r1, }, } var wg sync.WaitGroup wg.Add(2) go func() { repo.rwLock.RLock() rs := repo.Rules repo.rwLock.RUnlock() time.Sleep(2 * time.Second) for i := range rs { fmt.Println(rs[i].Id) } wg.Done() }() go func() { time.Sleep(1 * time.Second) repo.rwLock.Lock() repo.Rules[1].Id = 999 repo.Rules = repo.Rules[0:1] repo.Rules[0].Id = 1000 repo.rwLock.Unlock() wg.Done() }() wg.Wait()}
use std::sync::{Arc, Mutex};use std::thread;use std::time::Duration;struct Rule { id: i64, words: Vec<String>,}struct Repo { version: i64, rules: Vec<Arc<Mutex<Rule>>>,}fn main() { let r0 = Arc::new(Mutex::new(Rule { id: 0, words: vec!["a".to_string(), "b".to_string(), "c".to_string()], })); let r1 = Arc::new(Mutex::new(Rule { id: 1, words: vec!["0".to_string(), "1".to_string(), "2".to_string()], })); let repo = Arc::new(Repo { version: 0, rules: vec![r0, r1], }); let mut handles = Vec::new(); let repo_for_read = Arc::clone(&repo); let handle1 = thread::spawn(move || { let repo = repo_for_read; let rs = repo.rules.clone(); thread::sleep(Duration::from_secs(2)); for r in rs.iter() { println!("{}", r.lock().unwrap().id); } }); handles.push(handle1); let repo_for_write = Arc::clone(&repo); let handle2 = thread::spawn(move || { thread::sleep(Duration::from_secs(1)); let mut rules = repo_for_write.rules.clone(); if let Some(r) = rules.get_mut(1) { let mut r = r.lock().unwrap(); r.id = 999; } rules.remove(1); if let Some(r) = rules.get_mut(0) { let mut r = r.lock().unwrap(); r.id = 1000; } }); handles.push(handle2); for handle in handles { handle.join().unwrap(); }}
我想写一个模拟 DNF 装备增幅的程序,通过多次样本执行得到平均每件增幅 10 装备需要增幅多少次。装备 +4 之前不会失败,+4 之后会失败且失败后还会掉级,具体如下图所示: 公会秘药和普雷宠物会额外增加每次增幅的成功率 1% 和 4%,所以一共分了三种情况。 我最开始用 js 写了一版: 后来想到我刚学了 rust,不如练练手,而且 rust 很快,于是又写了一版: 然而实际上 rust 代码
我们知道,Node.js 不适合 CPU 密集型计算的场景,通常的解决方法是用 C/C++ 编写 Node.js 的扩展(Addons)。以前只能用 C/C++,现在我们有了新的选择——Rust。 3.5.1 环境 node@8.9.4 rust@1.26.0-nightly 3.5.2 Rust Rust 是 Mozilla 开发的注重安全、性能和并发的现代编程语言。相比较于其他常见的编程语言,
这本书将教会你使用Rust 编程语言。Rust 是一个系统编程语言,它注重于三个方面:安全,速度和并发性。为了实现这些目标,它没有采用垃圾回收机制(GC)。这让它在其它语言并不擅长的场景中大展身手:嵌入到其它语言中、在特定的时间和空间要求下编程、编写例如设备驱动和操作系统这样的底层代码。
Rust 语言是一种高效、可靠的通用高级语言。其高效不仅限于开发效率,它的执行效率也是令人称赞的,是一种少有的兼顾开发效率和执行效率的语言。
算法(Rust语言描述) 这是一本开源的算法书,在遵守许可协议的前提下您可以自由的使用、翻译、印刷、出版本书。在遵守许可协议的前提下您也可以将这本书商业化。 如果您想加入本书的编撰,您可以联系本书的发起者yevgenyliu@yahoo.com
新手写了一个晚上没写出来, 各种报错, baidu google 翻遍了, 求帮忙写个参考一下。 有一个向量 let data: Vec<i32> = (0..50).collect(); 需要开三个thread来修改data 每个thread获取data的4个元素, 原地修改元素 // 0, 1, 2, 3 -> 1, 2, 3, 4 1号thread +1 // 4, 5, 6, 7 -> 6