タグ

mutexに関するyohei-aのブックマーク (5)

  • アダプティブロック - tsucchi’s diary(元はてなダイアリー)

    毎度楽しみにしている、Linux Kernel Watch。今回はこんなお話が出てきました。 スケジューラの挙動は三巨頭会談で決まるのだ?(1/2) − @IT ついにLinuxにもadaptive lock導入か?! adaptive lockとは、Solarisなどで採用されているロック方式で、一定時間ビジーウェイトで待った後、通常のブロック型のmutexに縮退するというハイブリッド型のロックです。Linuxにおいても、過去何回かSolarisスタイルのadaptive lockが提案されてきましたが、どれも性能がイマイチだったこととLinuxカーネルの設計方針に合致しなかったため、マージされませんでした。 この提案は過去の提案とは異なり、時間によってspinとblockを切り替えるのではなく、ロック保持タスクが別CPUで動いているときはspinに、寝ているときはblockにと切り替え

  • Linus(と筆者)を嘆かせたanon_vma騒ぎ(1/2) - @IT

    4月版 Linus(と筆者)を嘆かせたanon_vma騒ぎ 小崎資広 2010/5/18 こんにちは。文で紹介するanon_vma騒ぎに巻き込まれまくって、ゴールデンウイークが丸ごとつぶれてしまってションボリな筆者です。いったいLKMLでどんなことがあったのでしょうか。それではどうぞ。 アダプティブMutexの最適解は? Darren Hartは「RFC: Ideal Adaptive Spinning Conditions」と題した興味深い投稿をポストしました。この提案はFUTEX_LOCKおよびFUTEX_LOCK_ADAPTIVEという新しいfutex操作を導入することにより、ユーザーランドスピンロック問題を解決することを目指しています。 ユーザーランドスピンロック問題とは、昨年のkernel summit以降、盛んに議論されるようになったトピックです。現在、PostgreSQL

  • Linux スレッドプログラミング

    GNU/Linux でのスレッドプログラミング NPTL (Native POSIX Thread Library) Programming. 以前から GNU/Linux でスレッドプログラミングをするための簡単なガイドを書きたいと思っていました。今更スレッドプログラミングについて書いても目新しいものになるとは思えないのですが、初めて NPTL (Native POSIX Thread Library) を使ったプログラムをするという方には、もしかしたら役に立つ情報かもしれません。はじめは怖々小さなプログラムを書いて動かしてみる。思ったより簡単なことに驚かれるでしょう。スレッドプログラミングと言っても難しいことはなにもありません。ライブラリが沢山仕事をしてくるおかげで快適に使うことができます。 文中では glibc のバージョンによる違いについても触れます。参照したバージョンは gli

  • スピンロックとmutexの速度比較 - 玲瓏庵

    スピンロック(spin lock)とは ロックを取得できるまでループし続ける。そのためロックを取得できないとCPUを占有し続けるので、競合が多く発生する状況下では一般的なmutexに比べて不利になる。 ただしロックの確認作業はmutexより早い。 詳しくは: スピンロック - Wikipedia Threading Building Block(TBB)でベンチを取る では、実際にどれだけ早いのか試してみよう。 確認にはIntel Threading Building Block(TBB)を使用する。 TBBはOSSのC++テンプレートを使用した並列処理ライブラリで、x86系 CPUに適した最適化がなされている。WindowsMac OS X他でも使えるがx86系CPUで使用できないのが惜しまれる。 Threading Building Blocks | 使用環境 Intel Celer

    スピンロックとmutexの速度比較 - 玲瓏庵
  • スピンロックの使用

    スピンロックの使用 スピンロックは、主に共有メモリー型のマルチプロセッサ上での使用に適した低レベルの同期機構です。呼び出しスレッドが、すでに別のスレッドによって保持されているスピンロックを要求する場合、2 番目のスレッドは、そのロックが使用可能になったかどうかをテストするためのループに入ります。スピンはプロセッササイクルを浪費するため、ロックを獲得したら、短時間だけ保持するようにすべきです。呼び出し元は、ほかのスレッドがロックを獲得できるようにするためのスリープ操作を呼び出す前に、スピンロックを解除するようにしてください。 スピンロックは mutex と条件変数を使用して実装することもできますが、スピンロックを実行するための標準化された方法は pthread_spin_* 関数です。短期間のロックであれば、pthread_spin_* 関数に必要なオーバーヘッドははるかに少なくなります。

    yohei-a
    yohei-a 2012/08/13
    "非常に短期間のブロックでは、スピンロックの方が全体的なオーバーヘッドは少なくなることがあります。スレッドがより長期間ブロックされる場合は、mutex の方が全体的なオーバーヘッドは少なくなることがあります。"
  • 1