-
Notifications
You must be signed in to change notification settings - Fork 0
Reading Record #1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
10.2から |
10.3から |
10.3 「ライフタイム省略」から |
11.から |
11.3から |
12から |
12.3から |
12.4から |
12.5から |
13から |
13.2から |
13.3から |
13.4から |
14から |
14.2から |
14.3から 14.3の学習結果: |
14.4から 14.4の学習結果: |
14.5から 14.5の学習結果: |
15章から |
15.1から |
15.2から |
15.3から |
15.4から |
15.5から |
15.6から |
16から 所有権と型システムはメモリ安全性と並行性問題を管理するのに役立つ。
|
16.1から Rustの標準は、OSスレッドと言語スレッドが1:1のみをサポートする。 |
16.2から 「転送機と受信機のどちらかがドロップされると、 チャンネルは閉じられたと言います。」 |
16.3から use std::rc::Rc;
use std::sync::Mutex;
use std::thread;
fn main() {
let counter = Rc::new(Mutex::new(0));
let mut handles = vec![];
for _ in 0..10 {
let counter = Rc::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());
} Rcはスレッド間で共有するのには安全でないため、エラーとなる。 - Rc<T>が参照カウントを管理する際、 cloneが呼び出されるたびにカウントを追加し、クローンがドロップされるたびにカウントを差し引きます。
- しかし、並行基本型を使用してカウントの変更が別のスレッドに妨害されないことを確認していないのです。
- これは間違ったカウントにつながる可能性があり、今度はメモリリークや、使用し終わる前に値がドロップされることにつながる可能性のある潜在的なバグです。
- 必要なのは、いかにもRc<T>のようだけれども、参照カウントへの変更をスレッドセーフに行うものです |
16.4から Sendマーカートレイト => Sendを実装した型の所有権をスレッド間で転送できる。 Sync |
17から 17.1trait のデフォルトメソッドをそのtraitを実装する型が利用できる点が、子が親の実装を利用できる点において継承に似ている。 |
17.2から 17.2pub struct Screen<T: Draw> {
pub components: Vec<T>,
}
impl<T> Screen<T>
where T: Draw {
pub fn run(&self) {
for component in self.components.iter() {
component.draw();
}
}
} のようなジェネリックな型とトレイト境界を使用する実装では、Drawの型が同種のものしか取れなくない。 トレイトオブジェクトはダイナミックディスパッチ。実行時に具体的にどのコードを呼び出すかが決まる。 トレイトオブジェクトに必要なオブジェクト安全性
pub trait Clone {
fn clone(&self) -> Self;
}
pub struct Screen {
pub components: Vec<Box<Clone>>,
} Selfを返しているので、エラーになる。
|
17.3
よくわからない。 |
18 から |
19から |
19.2 高度なトレイト関連型genericsで実装すると、複数の実装が可能になる。 |
20から |
次回20.2から |
次回20.2の復習 非同期IOとfork/join の場合をやるかどうか。。。 |
No description provided.
The text was updated successfully, but these errors were encountered: