println!("Количество ссылок на rc_a: {}", Rc::strong_count(&rc_a));
// Два `Rc` равны, если равны их внутренние значения
println!("rc_a и rc_b равны: {}", rc_a.eq(&rc_b));
// Мы можем напрямую использовать методы внутреннего значения
println!("Размер значения внутри rc_a: {}", rc_a.len());
println!("Значение rc_b: {}", rc_b);
println!("--- rc_b удаляется ---");
}
println!("Количество ссылок на rc_a: {}", Rc::strong_count(&rc_a));
println!("--- rc_a удаляется ---");
}
// Ошибка! `rc_examples` уже перемещена в `rc_a`
// И когда `rc_a` удалилась, `rc_examples` удалилась вместе с ней
// println!("rc_examples: {}", rc_examples);
// TODO ^ Попробуйте удалить комментарий эту строку
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Многие другие типы предоставляются стандартной библиотекой для вспомогательных целей, например:
• Потоки
• Каналы
• Операции файлового ввода/вывода
Они расширяют возможности, которые предоставляют примитивы.
примитивы и стандартная библиотека
Rust предоставляет механизм для создания собственных потоков операционной системы через функцию spawn. Аргументом этой функции является замыкание, которое принимает владение захваченным ею окружением.
use std::thread;
static NTHREADS: i32 = 10;
// Это главный поток `main`
fn main() {
// Создаём вектор дочерних потоков.
let mut children = vec![];
for i in 0..NTHREADS {
// Создаём очередной поток
children.push(thread::spawn(move || {
println!("этот поток номер {}", i);
}));
}
for child in children {
// Ждём пока поток завершится и вернёт результат.
let _ = child.join();
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Эти потоки будут запланированы ОС.
Rust позволяет очень легко распределить обработку данных между потоками, без головной боли, традиционно связанной с попыткой сделать это.