タグ

マルチスレッドに関するkanno_kannoのブックマーク (3)

  • Lock-free スナップショットの撮り方を説明してみる - くまメモ

    マルチスレッドなどの環境下で時間経過によって勝手に変化する複数の変数を読みたい場面は多くあります。 しかしCPUは一度に一つしか値を読み書きできないので、簡単には出来ません。 何故なら読んでるそばから値が変動してでたらめな値を読むかも知れないからです。 変動してるものを読むのだから読む側が完璧じゃなくても仕方ないという妥協は有り得ますが 特定のある一瞬の時刻での状態を写真のようにパチリとフィルムに収められたら嬉しいですよね。 一番簡単なのはロックを取りながら読む事ですが、ロックは諸般の事情により使えない事とします。 前提 値が勝手に変動するという状況が分かりにくいと思うので、適当な例えとして卵の孵化を想像してみましょう。 「卵」→「ヒビ」→「ひよこ」 の順でランダムに勝手に進んで行きます。止めることは出来ませんし後戻りもしません。 こんな卵が複数ある孵化器の監視を任されたとします。卵の状態

    Lock-free スナップショットの撮り方を説明してみる - くまメモ
  • double-checked-locking問題のまとめ

    先のエントリで もりあがったdouble-checked-locking問題についてのまとめです。 参考資料 IBMの記事が質が高くて分かりやすいですね。 double-checked lockingとSingletonパターン(2002年5月) Javaの理論と実戦: Javaメモリ・モデルを修正する 第1回(2004年2月24日) Javaの理論と実戦: Javaメモリ・モデルを修正する 第2回(2004年3月30日) コンパイラ開発者のためのJSR133クックブック double-checked locking問題とは 「double-checked lockingとSingletonパターン」では、GoFデザインパターンのSingletonパターンを Javaで実装する際に同期の処理コストも含め、どのようにすべきかについて書かれています。 「double-checked locki

  • volatileで最適化を抑制する - 職業としてのプログラミング

    C言語やC++,Javaにはvolatileという修飾子があります。組み込み系ソフトウェアやマルチスレッドのアプリケーションを書いている方にとっては、なじみ深い存在ですが、そうでない方にはあまり縁がないのかもしれません。しかし、volatileの使い方や存在意義を知らないままコーディングを行うと、思わぬバグを引き起こす場合があります。今回は、そのvolatileキーワードについて簡単に説明したいと思います。 volatileは初期のCであるK&Rには含まれていませんでしたが、ANSI C(C89)以降のC標準規格にはconstと一緒に含まれるようになりました(constとvolatileをあわせてcv修飾子と呼ぶこともあります)。一般的なCなら必ず備えている修飾子です。 volatile修飾子の意味ですが、「プログラミング言語C ANSI規格準拠」によると、 volatileの目的は,黙っ

  • 1