タグ付けされた質問 「atomic」

アトミック操作は不可分です。この用語は、データベース内のトランザクション、マルチスレッドプログラムでの低レベルアクセス、ファイルシステム操作などを表すために使用されます。


7
アトミック/揮発性/同期の違いは何ですか?
アトミック/揮発性/同期化は内部的にどのように機能しますか 次のコードブロックの違いは何ですか? コード1 private int counter; public int getNextUniqueIndex() { return counter++; } コード2 private AtomicInteger counter; public int getNextUniqueIndex() { return counter.getAndIncrement(); } コード3 private volatile int counter; public int getNextUniqueIndex() { return counter++; } volatile次のように機能しますか?です volatile int i = 0; void incIBy5() { i += 5; } に相当 …

6
プログラミングにおける「アトミック」とはどういう意味ですか?
効果的なJavaの本では、それは述べています: 言語仕様は、変数がタイプlongまたはdouble[JLS、17.4.7] でない限り、変数の読み取りまたは書き込みがアトミックであることを保証します。 「アトミック」とは、Javaプログラミングのコンテキスト、またはプログラミング全般の意味を教えてください。
276 java  atomic 


3
std :: atomicとは正確には何ですか?
私はそれstd::atomic<>がアトミックオブジェクトであることを理解しています。しかし、どの程度アトミックですか?私の理解では、操作はアトミックである可能性があります。オブジェクトをアトミックにすることは正確にはどういう意味ですか?たとえば、次のコードを同時に実行する2つのスレッドがあるとします。 a = a + 12; 次に、操作全体(たとえばadd_twelve_to(int))はアトミックですか?または、変数atomic(so operator=())に変更が加えられていますか?

13
num ++は 'int num'に対してアトミックですか?
一般ためにint num、num++(又は++num)、リード・モディファイ・ライト動作として、ある原子ではありません。しかし、GCCなどのコンパイラが次のコードを生成することがよくあります(ここで試してください)。 に対応する5行目num++は1つの命令なので、この場合num++ はアトミックであると結論付けることができますか? もしそうなら、それは、そのように生成num++されたデータレースの危険なしに同時(マルチスレッド)シナリオで使用できることを意味します(つまり、たとえば、それを作成する必要がなくstd::atomic<int>、関連するコストを課します。とにかくアトミック)? 更新 この質問はインクリメントがアトミックであるかどうかではないことに注意してください(そうではなく、それが問題の最初の行でした)。それはかどうかだことができ、特定の場合で1命令自然の缶はのオーバーヘッドを回避するために悪用されるかどうか、すなわち、特定のシナリオでも接頭辞を。そして、受け入れられた回答がユニプロセッサマシンに関するセクションで言及しているように、この回答と同様に、そのコメントでの会話や他の人が説明しているように、それは可能です(ただし、CまたはC ++ではできません)。lock

8
!=チェックスレッドは安全ですか?
などの複合操作i++は複数の操作を伴うため、スレッドセーフではありません。 しかし、それ自体で参照をチェックすることはスレッドセーフな操作ですか? a != a //is this thread-safe 私はこれをプログラムして複数のスレッドを使用しようとしましたが、失敗しませんでした。私のマシンではレースをシミュレートできなかったと思います。 編集: public class TestThreadSafety { private Object a = new Object(); public static void main(String[] args) { final TestThreadSafety instance = new TestThreadSafety(); Thread testingReferenceThread = new Thread(new Runnable() { @Override public void run() { long countOfIterations = 0L; while(true){ boolean …

5
マルチスレッドでvolatileを使用するのはいつですか?
グローバル変数にアクセスするスレッドが2つある場合、多くのチュートリアルでは、変数を揮発性にして、コンパイラーが変数をレジスターにキャッシュしないようにし、正しく更新されないようにします。ただし、共有変数にアクセスする2つのスレッドは、ミューテックスを介して保護を要求するものではありませんか。しかし、その場合、スレッドのロックとミューテックスの解放の間に、コードはその1つのスレッドだけが変数にアクセスできるクリティカルセクションにあります。この場合、変数は揮発性である必要はありませんか? したがって、マルチスレッドプログラムでのvolatileの使用/目的は何ですか?

6
AtomicInteger lazySetとset
lazySetとsetメソッドの違いは何AtomicIntegerですか?ドキュメントはについて言うことがたくさん持っていませんlazySet。 最終的には、指定された値に設定されます。 保存された値がすぐに目的の値に設定されるのではなく、将来のある時点で設定されるようにスケジュールされるようです。しかし、この方法の実際の使用法は何ですか?何か例は?
116 java  concurrency  atomic 


4
ファイルの追加はUNIXでアトミックですか?
一般に、複数のプロセスからUNIXのファイルに追加する場合、何を当然と見なすことができますか?データを失う可能性はありますか(1つのプロセスが他のプロセスの変更を上書きします)?データが壊れる可能性はありますか?(たとえば、各プロセスが追加ごとに1行をログファイルに追加していますが、2行が破損する可能性はありますか?)上記の意味で追加がアトミックでない場合、相互排除を保証する最良の方法は何ですか?

3
アトミック操作コスト
アトミック操作(コンペアアンドスワップまたはアトミック加算/デクリメントのいずれか)のコストはいくらですか?どのくらいのサイクルを消費しますか?SMPまたはNUMAで他のプロセッサを一時停止しますか、それともメモリアクセスをブロックしますか?アウトオブオーダーCPUのリオーダーバッファをフラッシュしますか? キャッシュにはどのような影響がありますか? x86、x86_64、PowerPC、SPARC、Itaniumなどの最新の人気のあるCPUに興味があります。

5
C ++ 11のstd :: atomic :: compare_exchange_weak()を理解する
bool compare_exchange_weak (T& expected, T val, ..); compare_exchange_weak()C ++ 11で提供される比較交換プリミティブの1つです。それはだ、弱いオブジェクトの値が等しい場合、それは偽さえを返すという意味でexpected。これは、(x86のように1つではなく)一連の命令を使用して実装する一部のプラットフォームでの誤った障害が原因です。このようなプラットフォームでは、コンテキストスイッチ、別のスレッドによる同じアドレス(またはキャッシュライン)のリロードなどにより、プリミティブが失敗する可能性があります。それはだspurious、それが(等しくないオブジェクトの値ではありませんようexpected、操作を失敗しました)。代わりに、それは一種のタイミングの問題です。 しかし、私を困惑させるのは、C ++ 11標準(ISO / IEC 14882)で言われていることです。 29.6.5 ..疑似障害の結果、弱いコンペアアンドスワップのほぼすべての使用がループになります。 ほぼすべての用途でループする必要があるのはなぜですか?それは、誤った失敗のために失敗したときにループすることを意味しますか?もしそうなら、なぜcompare_exchange_weak()私たちは自分たちでループを使用して書くのですか?私たちはcompare_exchange_strong()、私たちのために偽の失敗を取り除くべきだと私が思うものを使うことができます。の一般的な使用例はcompare_exchange_weak()何ですか? 関連する別の質問。彼の著書「C ++ Concurrency In Action」の中で、Anthonyは次のように述べています。 //Because compare_exchange_weak() can fail spuriously, it must typically //be used in a loop: bool expected=false; extern atomic<bool> b; // set somewhere else while(!b.compare_exchange_weak(expected,true) && !expected); //In …

10
Django:データベースエントリの同時変更から保護するにはどうすればよいですか?
2人以上のユーザーによる同じデータベースエントリの同時変更から保護する方法はありますか? 2番目のコミット/保存操作を実行しているユーザーにエラーメッセージを表示することは許容されますが、データを黙って上書きしないでください。 ユーザーが「戻る」ボタンを使用するか、単にブラウザを閉じて、ロックを永久に残す可能性があるため、エントリをロックすることはオプションではないと思います。

4
C ++ 11でStoreLoadバリアを実現する方法は?
古典的な問題の変形を解決する移植可能なコード(Intel、ARM、PowerPC ...)を記述したいと思います。 Initially: X=Y=0 Thread A: X=1 if(!Y){ do something } Thread B: Y=1 if(!X){ do something } ここでの目標は、両方のスレッドがやっているような状況を避けるためですsomething。(どちらも実行しなくても問題ありません。これは1回だけ実行するメカニズムではありません。)以下の私の推論に欠陥がある場合は、修正してください。 私は次のようにmemory_order_seq_cstアトミックstoresおよびloads を使用して目標を達成できることを認識しています。 std::atomic<int> x{0},y{0}; void thread_a(){ x.store(1); if(!y.load()) foo(); } void thread_b(){ y.store(1); if(!x.load()) bar(); } {x.store(1), y.store(1), y.load(), x.load()}イベントにはいくつかの単一の合計順序が必要であり、プログラムの順序「エッジ」に同意する必要があるため、これは目標を達成します。 x.store(1) 「TOは前に」 y.load() y.store(1) 「TOは前に」 x.load() foo()呼び出された場合、追加のエッジがあります: y.load() 「前に値を読み取る」 y.store(1) bar()呼び出された場合、追加のエッジがあります: …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.