問題タブ [atomic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 多くのリーダーと 1 つのライターを持つファイルを安全に更新するにはどうすればよいですか?
ファイルのセットがあります。ファイルのセットは、NTFS 共有からは読み取り専用であるため、多くのリーダーを持つことができます。各ファイルは、書き込みアクセス権を持つ 1 つのライターによって時々更新されます。
次のことを確認するにはどうすればよいですか。
- 書き込みが失敗した場合、以前のファイルがまだ読み取り可能であること
- 読者は単一の作家を保持することはできません
私はJavaを使用していますが、現在の解決策は、ライターが一時ファイルに書き込み、File.renameTo()
. 問題は NTFS にあり、renameTo
ターゲット ファイルが既に存在する場合は失敗するため、自分で削除する必要があります。しかし、ライターがターゲット ファイルを削除してから失敗した場合 (コンピューター クラッシュ)、読み取り可能なファイルがありません。
nio の FileLock は同じ JVM でしか機能しないため、私には役に立ちません。
Java を使用して多くのリーダーでファイルを安全に更新するにはどうすればよいですか?
delphi - 「スレッドセーフ」な読み取り/書き込み操作を使用するDelphiデータ型のリスト?
'boolean'変数は、任意のスレッドからの読み取りと書き込みに対してスレッドセーフですか?私はそれらがそうであると言うためにいくつかのニュースグループの参照を見ました。他のデータ型は利用できますか?(列挙型、おそらく短いint?)
任意のスレッドから安全に読み取ることができるすべてのデータ型のリストと、さまざまな同期方法に頼ることなく任意のスレッドで安全に書き込むことができる別のリストがあると便利です。
java - 一意の負の数を生成するノンブロッキング アルゴリズム
私は最近、一意の負の数を生成するために使用されるコードをリファクタリングしました。
編集:複数のスレッドがこれらの ID を取得し、キーとして DB に追加します。簡単に識別できるようにするには、数値を負にする必要があります。テスト セッションの終了時に、数値は DB から削除されます。
私のJavaアルゴリズムは次のようになります。
上記のコード構造は、セットと「再試行」ループに投機的に追加されているため、同期されたセットをアトミック変数のいずれかに置き換える、同等のノンブロッキング アルゴリズムがあると思われます。
アトミック変数を使用して書き直そうと何度か試みましたが、すべてマルチスレッド攻撃テストに失敗しました。
エレガントなノンブロッキングの同等物はありますか?
編集:好奇心のために、アトミック整数をガードとして使用する欠陥のある試みを次に示します
編集:以下のテストハーネス:
multithreading - これはダブルチェックロックの安全なバージョンですか?
ウィキペディアからの正規の壊れたダブルチェックロックのわずかに変更されたバージョン:
基盤となるアトミックopsライブラリが適切に機能していると仮定して、新しく作成されたHelperインスタンスをアトミックに公開するだけで、このダブルチェックのロックイディオムが安全になりますか?Javaでは、を使用するだけでよいことを理解してvolatile
いますが、例が疑似Javaであるとしても、これは言語に依存しない質問であると考えられます。
参照:
ios - アトミック属性と非アトミック属性の違いは何ですか?
プロパティ宣言の意味atomic
とは?nonatomic
これら3つの操作上の違いは何ですか?
assembly - x86には、保存された値を保持するアトミックインクリメントがありますか?
私は見つけましlock inc addr
たが、それは保存された値のコピーを保持せず、同じスレッドでの直後の読み取りでさえ、競合する書き込みの後に来る可能性があります。
私が見つけた最良の解決策はload
//inc
ループcas
です。
sql - 原子性SQLの確保
私はちょうど RDBMS について読んでいましたが、RDBMS の 1 つの特性は原子性です。したがって、お金が口座から引き出され、別の口座に送金された場合、取引は完全に行われるか、まったく行われません。部分的な取引はありません。しかし、実際にはどのように確保されているのでしょうか?
上記のシナリオの SQL クエリは次のようになります (i) UPDATE accounts
set balance = balance - amount WHERE ac_num = 101 (ii) UPDATE accounts
set balance = balance + amount WHERE ac_num = 102
これは決して原子性を保証するものではありません..では、実際にはどのように起こるのでしょうか?
c - Cで関数をアトミックにする方法はありますか?
Cで関数をアトミックにする方法はありますか.
移植可能なソリューションは探していません (探しているプラットフォーム - Win、Linux)