Upgrade to Pro — share decks privately, control downloads, hide ads and more …

What is std::sync::atomic

What is std::sync::atomic

Rustのstd::sync::atomicの必要性と既に定義された型にトレイトを実装する方法を解説しました。

Kentaro Matsumoto

September 03, 2019
Tweet

More Decks by Kentaro Matsumoto

Other Decks in Programming

Transcript

  1. シングルスレッドの場合 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11111111

    11111111 11111111 11111111 11111111 11111111 11111111 11111111 書きます!
  2. シングルスレッドの場合 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

    00000000 00000000 00000000 00000000 00000000 00000000 00000000 読みます!
  3. マルチスレッドの場合 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11111111

    11111111 00000000 00000000 00000000 00000000 00000000 00000000 書きます!
  4. マルチスレッドの場合 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11111111

    11111111 11111111 11111111 00000000 00000000 00000000 00000000 書いていますよ! 読みます!
  5. マルチスレッドの場合 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11111111

    11111111 11111111 11111111 11111111 11111111 00000000 00000000 まだ書いていますヽ (`Д´)ノプンプン 読了
  6. マルチスレッドの場合 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11111111

    11111111 11111111 11111111 11111111 11111111 00000000 00000000 まだ書いていますヽ (`Д´)ノプンプン 読了    は何を    読んだのか
  7. std::sync::atomic • Atomic型を提供するモジュール ◦ AtomicBool, AtomicIsize, AtomicIsize • Atomic型はSyncトレイトが実装されている ◦

    安全にスレッド間で共有可能 • スレッド間で共有される機能は持っていないのでArcを使う ◦ Arc::new(AtomicUsize::new(0))
  8. AtomicUsizeとAtomicUsizeを比較したい • 比較したいときはstd::cmp::PartialEqをimplする。 • AtomicUsizeはstd::sync::atomic::AtomicUsize。 • error[E0117]: only traits defined

    in the current crate can be implemented for arbitrary types ◦ 現在のcrateで定義されたtraitだけを任意の型にimpl可能 ◦ どちらも既にあるのでimplできない。