プログラムのお勉強メモ

プログラムの勉強メモです. Python, Rust, など.

実践Rustプログラミング入門 3日目

3日目の勉強

  • Dropトレイト
  • スレッド

Dropトレイト

  • Drop トレイトを実装した struct はライフタイムの終了とともにクローズされる
  • Java で言うところの try-with-resources と考えれば良さそう

Drop実装

#[derive(Debug)]
struct ConnectionManager {
    connection: usize,
}

impl Drop for ConnectionManager {
    fn drop(&mut self) { // drop 関数を定義して, drop で実行する処理を記載する
        println!("Dropped!");
    }
}

fn main() {
    println!("start.");
    // ライフタイム区間開始
    {
        let connect = ConnectionManager { connection: 10 };
    }
    // 終了
    println!("end.");
}
  • 出力結果
start.
Dropped!
end.

スレッド

  • スレッド出てくるの早くない?
  • 言語としてスレッド安全性を保つ仕組みがしっかりしているとのこと

スレッドの実装

use std::{thread, time::Duration};

fn print_10(x: &usize) {
    for i in 1..11 {
        println!("I'm thread {}. roop_count = {}.", x, i);
        let duration = Duration::new(0, 100000);
        std::thread::sleep(duration);
    }
}

fn main() {
    let mut handler = vec![];

    for i in 1..6 { // 5スレッド生成
        let handle = thread::spawn(move || print_10(&i));
        handler.push(handle);
    }

    for handle in handler { // join することでスレッドの処理が終了するまで待ってくれるらしい
        let _ = handle.join();
    }
}

所感

  • Rust の 基本でいきなりマルチスレッドの話まで出てきて焦る
  • スレッド間制御は別日に実施

多謝