You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
1.4 KiB
Rust
79 lines
1.4 KiB
Rust
use std::thread;
|
|
use std::sync::{Mutex, Arc};
|
|
use std::sync::mpsc::channel;
|
|
|
|
fn scoped() {
|
|
vec![1, 2, 3];
|
|
}
|
|
|
|
fn scoped2() -> Vec<u32> {
|
|
vec![1, 2, 3]
|
|
}
|
|
|
|
fn scoped3() {
|
|
let v1 = vec![1, 2, 3];
|
|
let v2 = v1;
|
|
//it is now illegal to reference v1,
|
|
//because ownership has been transferred to v2
|
|
}
|
|
|
|
fn scoped4() {
|
|
vec![1, 2, 3].clone();
|
|
"".to_string().clone();
|
|
}
|
|
|
|
fn scoped5() {
|
|
fn foo(v1: &Vec<u32>)
|
|
{
|
|
for v in v1
|
|
{
|
|
println!("{}", v);
|
|
}
|
|
}
|
|
|
|
let v1 = vec![1, 2, 3];
|
|
foo(&v1);
|
|
//v1 is still valid, ownership has been returned
|
|
v1;
|
|
}
|
|
|
|
fn thread1() {
|
|
let v = vec![1, 2, 3];
|
|
let handle = thread::spawn(move || {
|
|
println!("Here's a vector: {:?}", v);
|
|
});
|
|
handle.join().ok();
|
|
}
|
|
|
|
fn thread2()
|
|
{
|
|
let counter = Arc::new(Mutex::new(0));
|
|
let mut handles = vec![];
|
|
for _ in 0..10 {
|
|
let counter = Arc::clone(&counter);
|
|
let handle = thread::spawn(move || {
|
|
let mut num = counter.lock().unwrap();
|
|
*num += 1;
|
|
});
|
|
handles.push(handle);
|
|
}
|
|
for handle in handles {
|
|
handle.join().unwrap();
|
|
}
|
|
println!("Result: {}", *counter.lock().unwrap());
|
|
}
|
|
|
|
fn thread3() {
|
|
let (sender, receiver) = channel();
|
|
let handle = thread::spawn(move || {
|
|
//do work
|
|
let v = vec![1, 2, 3];
|
|
sender.send(v).unwrap();
|
|
});
|
|
handle.join().ok();
|
|
receiver.recv().unwrap();
|
|
}
|
|
|
|
fn main() {
|
|
}
|