Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
5 分でやる Rust Concurrency in Ac0on @syu_cream
Slide 2
Slide 2 text
わたしはだれ • @syu_cream – ウェッブサービスの裏側を支える技術者 – 趣味でmrubyの薄い本やC++のコード書いてます
Slide 3
Slide 3 text
今日のお話 • Rust でマルチスレッドプログラミングするのって • C++ でやるより楽だよねというはなし • 時間も限られてるし mutex についてのみ • 題材としてスレッド毎にvectorに要素追加してみる – GitHub に今日話すソースコードあります – h
Slide 4
Slide 4 text
C++ で書く場合(データ競合起こす版) • コンパイルは通る – ただし未定義動作になる
Slide 5
Slide 5 text
C++ で書く場合 • ロックを取ることでデータ競合を避ける
Slide 6
Slide 6 text
Rust で書く場合(データ競合起こす版1) • コンパイルが…
Slide 7
Slide 7 text
Rust で書く場合(データ競合起こす版1) • コンパイルが…通らない! – 複数のスレッドに変数をborrowしようとしてるため
Slide 8
Slide 8 text
Rust で書く場合(データ競合起こす版2) • じゃあ Arc で参照をcloneしてborrowしよう! • これでコンパイルが…
Slide 9
Slide 9 text
Rust で書く場合(データ競合起こす版2) • じゃあ Arc で参照をcloneしてborrowしよう! • これでコンパイルが…通らない! – Arc の変数は複数スレッドから変更できない
Slide 10
Slide 10 text
Rust で書く場合 • Mutex を使う! – lock() でロックを取って変更する
Slide 11
Slide 11 text
マルチスレッドプログラミングにおける C++ vs Rust • C++ – C++11以降ならthread,mutexが標準で使えて便利 – データ競合についてはプログラマが気をつける必要あり • Rust – データ競合が起こる場合コンパイル時にエラーになる
Slide 12
Slide 12 text
Rustでも競合状態は避けきれない • 以下のコードはデッドロックを起こす…
Slide 13
Slide 13 text
まとめ • Rust でマルチスレッドプログラミングするのって – コンパイル時のチェックが手厚いので • C++ でやるより楽だよねというはなし – ただし万能なわけではないよ