Rust Atomic and Locks 原书信息
作者:Mara Bos
出版社: O’REILLY
ISBN:978-1-098-11944-7
第一章 Rust并发基础
- 在多核处理器出现之前,操作系统通过在进程间快速切换,每个进程运行一段时间,来实现并发(concurrency);多核处理器出现后,实现了真正的并行(parallel);
- 不同的进程之间相互隔离,无法访问对方的内存,除非通过操作系统内核。但是进程可以产生(spawn)线程(threads),线程之间共享内存空间,从而可以简单地实现相互通信;
- 在Rust中,通过标准库的
std::thread::spawn
来产生新的线程,该方法需要一个参数,参数是该线程用于执行的函数(function),可以通过thread::current()::id()
来获取当前线程的ID,该ID仅能用于比较和复制,并且无法保证生成的ID是连续的; - main函数退出时会结束整个程序,即使有其他spawned的线程还在运行,如果需要所有线程都结束后再退出main函数,需要将
let t = thread::spawn(f)
的返回值(是一个JoinHandle类型)通过t.join().unwrap()
来回收; - !
println!
宏使用了std::io::Stdout::lock()
锁来确保每一次打印不被其他线程的打印干扰; spawn
函数有一个'static
静态生命周期限制,要求spawn的函数必须在整个程序(program)运行时存活,正常通过fn function()
声明的函数没有问题,但是闭包(closure)通过引用捕获(capturing by reference)局部变量的时候