double-checked-locking

    11

    2答えて

    スレッドセーフなダブルチェックロック(シングルトンまたは遅延初期化)を考慮して、多くの質問を読んでいます。いくつかのスレッドでは、パターンは完全に壊れていて、解決策を示唆するものがあります。 私の質問は、完全にスレッドセーフなダブルチェックされたロックパターンをC++で記述する方法ですか?もしそうなら、それはどのように見えるのですか? これは、C++ 11の場合は、それが簡単になると思います。私が

    6

    1答えて

    並行処理に戻る。今では、double checked lockingが動作するためには、変数をvolatileと宣言する必要があることは明らかです。ただし、以下のようにダブルチェックロックを使用するとどうなりますか? class Test<A, B> { private final Map<A, B> map = new HashMap<>(); public B fetc

    3

    1答えて

    私はConcurrentMap < String、SomeObject >オブジェクトを持っています。 SomeObjectが存在する場合はそれを返すメソッドを作成するか、新しいSomeObjectを作成してマップに入れ、存在しない場合はそれを返します。 理想的には、ConcurrentMapのputIfAbsent(key, new SomeObject(key))を使用することができますが、そ

    -1

    3答えて

    内のロックに同期使用することから、ロックダブルチェックを変換するJAVA 8に​​キーワードを使用してロックする次のコード実行のダブルチェックを考えてみましょう: private static void redoHeavyInitialisation() { if (needToReinitialise()) { synchronized (MyClass.class) {

    7

    2答えて

    私は同じ秒で複数のWebリクエストを介して呼び出すことができる次のコードを持っています。したがって、私は2番目の+要求がデータベースに当たるのを望んでいませんが、最初の要求が行われるまで待っています。 代わりにLazy<T> キーワード クラスを使用するようにこれをリファクタリングする必要がありますか?コードLazy<T>への10回のコールが同時に発生した場合、それらのコールのうち9回は最初のコー

    0

    2答えて

    Javaメモリモデルでは、関連するモニタの解放の一環としてスレッドが同期ブロックを終了するときに、JMMはローカルプロセッサキャッシュをメインメモリにフラッシュする必要があります。同様に、同期ブロックに入るときにモニタを獲得する一部として、は、ローカルキャッシュが無効にされるので、後続の読み出しはローカルキャッシュではなくメインメモリに直接行われる。 このコードでは、2番目のスレッドがsynchブ

    2

    3答えて

    Googleのアプリで「Double-checked locking」の1つのコードが発生している可能性があります。私が行っているのと同様のサンプルコードを書いています。 これはどのようにダブルチェックロックが発生する可能性があります誰が見ることができますか?それとも安全ですか? class Foo { private Helper helper = null; public

    1

    3答えて

    this C++のDouble Checked Locking Patternについての記事は、volatileを使用してDCLPを正しく実装する方法の1つを示しています変数: class Singleton { public: static volatile Singleton* volatile instance(); private: static volatile

    18

    2答えて

    多くの人によると、1.5以降を実行していない限り、volatileというキーワードを使用しない限り、多かれ少なかれ一般的なダブルチェックロックのイディオムがJava用に壊れています。 壊れたダブルチェックロックのサンプル: // Broken multithreaded version // "Double-Checked Locking" idiom class Foo { pri