База Hintsage

Конкурентность и async

Send/Sync, threads, channels, futures и async runtime.

Практика

Вопросы: Конкурентность и async

В коде поток получает собственное владение Rc<Mutex<i32>>, но компилятор всё равно отклоняет запуск. Объясните, какой механизм делает такую передачу недопустимой.

use std::{rc::Rc, sync::Mutex, thread};

fn main() {
    let counter = Rc::new(Mutex::new(0));
    let worker_counter = Rc::clone(&counter);

    thread::spawn(move || {
        *worker_counter.lock().unwrap() += 1;
    }).join().unwrap();
}
Программирование RustКонкурентность и asyncРазработчик Rust, занимающийся многопоточными сервисами

После запуска потока компилятор отклоняет этот код. Какое ограничение времени жизни нарушено захваченным значением?

use std::thread;

fn main() {
    let message = String::from("готово");
    let handle = thread::spawn(|| {
        println!("{message}");
    });
    handle.join().unwrap();
}
Программирование RustКонкурентность и asyncRust-разработчик системного программного обеспечения

В коде ниже компилятор отвергает создание Pin<&mut F>. Какое свойство async-future делает закрепление в памяти необходимым перед передачей future исполнителю?

use std::future::Future;
use std::pin::Pin;

async fn task() {
    let text = String::from("data");
    async {}.await;
    println!("{text}");
}

fn pollable<F: Future>(mut future: F) {
    let pinned = Pin::new(&mut future);
    let _ = pinned;
}

fn main() {
    pollable(task());
}
Программирование RustКонкурентность и asyncРазработчик Rust, занимающийся асинхронными сервисами

Показано 4150 из 50