初学,通过<The Rust Programming Language>学习了 rust ,想问一下关于以下场景在 rust 的最佳实现是什么。
假设需求为,在一台 8 核心电脑上,由主线程创建 8 个子线程。主线程有变量 int a ,8 个子线程中逻辑为 while 循环每次 a++;直到 a 大于 1 亿为止退出子线程。
根据书中描述,Rust 可以使用 mutex 互斥锁来实现上述需求,我的问题有以下几点:
关于这个需求我暂时没想出合适的使用场景,只是在看 rust 的过程中产生疑问。即 rust 通过所有权来确保代码安全,那么对于典型的所有权交错的情况,按 rust 的设计思想应该如何处理呢?比如有 A ,B 两类,实例化后要求 A 对象中引用 B ,B 对象中引用 A ,rust 要怎么确保互相引用是安全的?
谢谢
1
NPC666 2022-04-10 10:39:49 +08:00 via Android 1
建议学 rust 圣经里 https://course.rs/about-book.html
|
2
ihciah 2022-04-10 18:04:22 +08:00 via iPhone 1
A:
这个需求本身推荐直接 atomic 。锁的话你也可以自己实现,常见需求用 parking_lot 就好。 channel 内部往往也有锁或 CAS 。 涉及等待,thread 的话标准库有信号量等,async task 的话可以用 tokio/futures 等库提供的实现。 反正实在不行,自己搞 syscall 总能做。 B: 可控且性能要求高的循环引用可以直接 unsafe 手动来,比如实现双向链表。或者引入 Rc/Arc 等智能指针走引用计数。 就我个人的经验,应当尽可能的 thread local ,减少不必要的线程同步(当然这个和 rust 本身已经关键不大了)。也不用太慌 unsafe ,为了性能该 unsafe 还是要 unsafe 的。 |