タグ

atomicに関するyassのブックマーク (7)

  • LazySet Operations in Java

    yass
    yass 2015/03/22
    " The most important use case lazySet operation is to implement asynchronous logging. "
  • Comparing the performance of atomic, spinlock and mutex

    Comparing the performance of atomic, spinlock and mutex I was curious in benchmark of different synchronization mechanisms: atomic, spinlock, mutex. Without synchronization #include <future> #include <iostream> volatile int value = 0; int loop(bool inc, int limit) { std::cout << "Started " << inc << " " << limit << std::endl; for (int i = 0; i < limit; ++i) { if (inc) { ++value; } else { --value;

  • ConcurrentHashMapを使うならatomicなメソッドを使おう - kencharosの日記

    ConcurrentHashMapを使うときの注意点 タイトルの通りです。 ConcurrentHashMapは同期を取りつつ、パフォーマンスも優れたとても優秀なやつで、最近Webアプリケーションで、キャッシュみたいなものを作るときに使いました。 とはいえ同期を取るとはいっても以下のようなキーの存在を確認して、putするような複合アクションの呼び出し(いわゆるcheck-then-act)では同期されません。(別にこれは、従来のHahMapとかCollections.syncronizedMapとかでも同じです) // atomicではない操作。 if(!map.containsKey(key)) { map.put(key, value); } 以下が実証コードで、実行すると高い確率で複数スレッドで同一キーへのputを行います。 (今回のケースだとあまり問題にならないですが、valueを

    ConcurrentHashMapを使うならatomicなメソッドを使おう - kencharosの日記
    yass
    yass 2014/02/18
    " で、こんな時のためにConcurrentHashMapには、キーがなければ値を追加するという上記のような操作を行うputIfAbsentメソッドがあります。"
  • そのファイル、安全に更新できていますか?(アトミックなファイル操作:前編)

    ハートビーツ最年長エンジニアの滝澤です。以前、弊社CTOにシニアおっさんエンジニアから若手エンジニアに向けて何か書いてくれと言われた気がしたので、アトミック(atomic)なファイル操作について3編に分けて紹介します。この内容は弊社の社内勉強会で話した内容をまとめ直したものです。 そのファイル、安全に更新できていますか?(アトミックなファイル操作:前編)←今回 そのファイル、安全に作成できていますか?(アトミックなファイル操作:中編) そのファイル、安全にロックできていますか?(アトミックなファイル操作:後編) 今回は「みなさん、安全にファイルの更新ができていますか?」ということについて、考えてみましょう。 あなたはあるサーバ上のファイルの更新を依頼され、もらったファイルをサーバ上でコピーして上書きしました。しばらくして、データに異常が発生したので調べて欲しいと言われました。さて、何が起き

    そのファイル、安全に更新できていますか?(アトミックなファイル操作:前編)
    yass
    yass 2013/10/10
    " アトミックにファイルを更新するには、rename()というファイル名を変更するシステムコールを使います。mvコマンドはこのrename()を使ってファイル名の変更を行っています。"
  • GCCの組込みアトミック命令の使い方 | Everyday Deadlock

    ちょっと使うことがあったので、備忘録的にGCCの組込みアトミック命令の使い方についてまとめておきます。 前提知識 マルチスレッドプログラムにおいて、共有データを更新する際の定石は spin lock や mutex でデータを保護することです。 これらの道具は多くの場面において十分便利なのですが、例えば共有データが1個の int 変数のみであり、更に高頻度で更新が行われるといった場合にはやや同期のコストが高くついてしまいます。 そのような場合には、アトミック命令を用いることで同期オーバーヘッドを抑えることができます。 アトミック命令とは、複数のスレッドから実行されても、個々の命令が一つ一つ順番に適用されてゆくことが保証されている命令のことです。 (より正確には、個々の命令がとある順番で一つ一つ適用された時と同じ結果を得られることが保証されている命令のことです) 例えば、とある変数 X の値

  • コンピュータアーキテクチャの話(198) Test and Set命令

    メモリアクセスの排他制御 2つのプロセサが使用するメモリ領域が異なり、別々の仕事を分担する場合は問題ないのであるが、2つのプロセサで緊密に関係のあるデータを扱っている場合には問題が発生しうる。図9.19に示した預金引き出しの例では、残高と引き出し額を比較し、残高が十分にあれば残高から引き出し額を引き、引き出し額をATMから払い出す。 ここで、当初の残高が10万円の口座に対して、プロセサ1が8万円の引出し要求を受け付け、(1)で残高を読み処理を開始するが、それより一瞬遅れて、プロセサ2が同じ口座からの5万円の引出し要求を受け付けて(2)で残高を読むと、両方とも読み込んだ残高は10万円になってしまう。そしてプロセサ1が引出し処理を終わって(3)で残高に2万円と書き込むが、続いてプロセサ2が10万円-5万円=5万円で、(4)で残高に5万円と書き込んでしまう。つまり、10万円の残高の口座から、合計

    コンピュータアーキテクチャの話(198) Test and Set命令
  • Understanding Atomic Operations

    Introduction Atomic operations are the building blocks of synchronization primitives and non-blocking algorithms. They guarantee that, when modifying a memory location, it will happen without any interference from other threads. They are required whenever writing applications for multiple-cores architectures. Consider this function: void NonAtomicAND(tS32* Value, tS32 Op) { *Value &= Op; } Which t

    Understanding Atomic Operations
  • 1