multithreading

メモリバリアを理解するために必要な3つのこと

Togetter - 「メモリバリアとガチャピン先生」 上の話において、「メモリバリア」の意味するところをもう少し明確にすべきかなあと思ったので、簡単にまとめてみます。 「メモリバリア」が満たすべき性質は、以下の3つに分類することができます。 atomicity …

ハザードポインタ版Lock-Free List

前回の記事で時間切れのために書ききれなかった Lock-Free List について、サンプルコードをgithubに上げました。 GitHub - yamasa/lockfree: Experimental implementations of lock-free algorithms, using hazard pointers and tagged pointers. sortedlis…

lock-freeアルゴリズムにおけるメモリ回収

これは C++ advent calendar の参加記事です。 もともとは「マルチコア時代のLock-free入門」の補遺として書くつもりだったのが、何だかんだで一年近くほったらかしになってしまっていたので、今回 advent calendar という締切りを課すことでようやく書くこ…

ピーターソンのアルゴリズムとメモリバリア

cacheline awareな何かを作りたい。__attribute__((aligned(64)))で何か。— ロックフリーのkumagi (@kumagi) 2010年10月13日 とkumagiさんが言っていたので、ちょっとしたコードを張り付けてみます。 これは wikipedia:ピーターソンのアルゴリズム の実装例…

マルチコア時代のLock-free入門

本日、並カンにてLock-freeアルゴリズムについて発表しました。発表資料は以下になります。 なお、今回の発表で割愛したメモリバリアの詳細については、以下の発表資料を参照ください。 そろそろvolatileについて一言いっておくか また、Hazard pointerやタ…

C++0x時代の Double-Checked Locking

今回は "Double-Checked Locking" (以下DCL)というマルチスレッドプログラム向けのイディオムを例にして、C++0xの(低レイヤ向け)マルチスレッド機能の利用方法を紹介してみます。 DCLとは、「ロック→条件判定」というロジックを「条件判定→ロック→(再度)条件…

C++0xのメモリバリアをより深く解説してみる

もはや誰得レベルになりつつありますが、今回もメモリバリアについての話です。以前の話の続きになるので、まだの方は初回と前回のエントリを先にどうぞ。 さて、まず最初に、C++0xのatomicクラスを使った「正しく同期化されているコード」の例を挙げてみま…

次期C++に導入されるメモリバリアについて解説してみる

前のエントリで次期C++標準(通称C++0x)にatomic型とメモリバリアが導入されるという話をしました。今回はそのC++での実装について、もう少し深く追いかけてみます。 スライド資料では「atomic操作 + acquire/releaseバリア」が基本であると書きましたが、実…

volatile爆発しろ!

volatileという英単語には「爆発しやすい」という意味があるようですね。豆知識。 さて、前エントリのスライドで説明したように、マルチスレッドプログラムを正しく動作させるためにはCPUやコンパイラによるリオーダーを制限することが重要であり、そのため…

そろそろvolatileについて一言いっておくか

先月、CBUGとわんくまの勉強会にて、アトミック変数とかメモリバリアとかvolatileとかについて話をしてきました。 ちょっと遅くなりましたが、そのときの講演資料を一つにまとめたので、ここで公開しておきます。あと、補足記事も追加していってます。 volat…