Hi !
In order to access external variables in a thread, we must use the move closure with the move keyword in the thread creation.
In example, these 2 lines will define and create a mutable variable and then a new thread where we can access the var.
let mut new_var = "hey!";
let handle =thread::spawn(move || {
// access to new_var here
})
And an example of the previous code will have:
- A main thread where we declare a string var with a message.
- The 2nd thread that will display a message using the main thread message.
/* | |
Copyright (c) 2023 | |
Author : Bruno Capuano | |
Create Time : 2023 January | |
Change Log : | |
- Demos working with threads in Rust | |
The MIT License (MIT) | |
Permission is hereby granted, free of charge, to any person obtaining a copy | |
of this software and associated documentation files (the "Software"), to deal | |
in the Software without restriction, including without limitation the rights | |
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
copies of the Software, and to permit persons to whom the Software is | |
furnished to do so, subject to the following conditions: | |
The above copyright notice and this permission notice shall be included in | |
all copies or substantial portions of the Software. | |
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
THE SOFTWARE. | |
*/ | |
use std::thread; | |
fn main() { | |
let message = "Hello Bruno!"; | |
let handle = thread::spawn(move|| { | |
println!("Message from main thread: {}", message); | |
}); | |
handle.join().unwrap(); | |
} |
The code output shows that the app is closed before finishing the execution of the 2nd thread.
Super cool !
Happy coding!
Greetings
El Bruno
More posts in my blog ElBruno.com.
Top comments (0)