問題タブ [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.

0 投票する
4 に答える
606 参照

multithreading - 2 つの読み取りをアトミックにする方法はありますか?

メモリ内の 2 つの値のアトミック合計が必要な状況に陥っています。私が継承したコードは次のようになります。

a と b の個々の読み取りはアトミックであり、コード内のこれら 2 つのメモリ位置への書き込みもすべてロックレス アトミックです。ただし、問題は、2 つの場所の値が 2 つの読み取り間で変化する可能性があり、実際に変化することです。

では、この操作をアトミックにするにはどうすればよいでしょうか。私は CAS についてすべて知っていますが、読み取り-変更-書き込み操作をアトミックにすることだけが必要になる傾向があり、それは私がここでやりたいことではありません。

それを行う方法はありますか、またはコードをリファクタリングして、1つの値のみを確認する必要があるようにするための最良のオプションはありますか?

編集: ありがとう、最初のリビジョンでこれをロックレスでやりたいとは言いませんでしたが、2 回目のリビジョンの後でそれを理解した人もいました。こういうことを言う人は誰も信じないのはわかっていますが、実際にロックを使うことはできません。アトミックでミューテックスをエミュレートする必要があり、それはコードをリファクタリングして 2 つではなく 1 つの値を追跡するよりも手間がかかります。

今のところ、私の調査方法は、値が連続しているという事実を利用し、64 ビットの読み取りでアトミックにそれらを取得することです。これは、ターゲット プラットフォームではアトミックであることが保証されています。誰かが新しいアイデアを持っている場合は、貢献してください! ありがとう。

0 投票する
3 に答える
2416 参照

c++ - x86 (Pentium 以降) でアトミック 64b 読み取りを実行するには?

x86 プラットフォーム (Pentium 以上を保証) で 64b アラインされた 64b データのアトミック読み取りを実行したいと考えています。

これを行う方法はありますか?(いいえ、これにはクリティカルセクションやミューテックスを使用したくありません。これをロックフリーにしたいのです)。

0 投票する
1 に答える
3180 参照

c - GCC で一般的なアトミック ロードまたはストアを実装するより良い方法は?

GCC の組み込みのアトミック操作を認識しています: http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Atomic-Builtins.html

ただし、このリストには、ロードやストアなどの非常に単純な操作は含まれていません。インラインアセンブリを使用して制限付きアーキテクチャでこれらを実装できます (実際、x86 のような多くの場合、基本的には通常の mov になります) が、一般的なケースでは次のようなものよりも良い方法はありません:

0 投票する
3 に答える
359 参照

c# - 複数のネットワークにまたがるファイルのアトミックな変更

それぞれ異なるネットワーク共有にある 5 つの同一の xml ファイルを変更するアプリケーションがあります。これが不必要に冗長であることは承知していますが、「そうでなければなりません」。

このアプリケーションが実行されるたびに、正確に 1 つの要素 (それ以上でもそれ以下でもない) が追加/削除/変更されます。

最初に、アプリケーションは各 xml ファイルを開き、要素を適切なノードに追加/削除/変更してファイルを保存するか、保存できない場合はエラーをスローします (ネットワーク共有にアクセスできない、タイムアウトなど...)。

これをアトミックにするにはどうすればよいですか?

私の最初の仮定は次のとおりでした。

しかし、私はそれがこれまでのところしか進んでいないことがわかります。これを行う別の方法、または私が指し示すことができる方向はありますか?

0 投票する
2 に答える
740 参照

macros - マクロを「アトミック」にする方法

IOW マクロの実行時に OOo の元に戻す/やり直しを正しく機能させるにはどうすればよいですか?

これは私の以前の質問に関連しています: #853176

0 投票する
2 に答える
23006 参照

c++ - ロックフリー構造の C++ アトミック操作

cmpxchg16bなどのアトミック(ダブル)比較およびスワップ命令を使用して、ロックフリーメカニズムを実装しています

私は現在、これをアセンブリで作成してからリンクしています。ただし、コンパイラにこれを自動的に実行させる方法があるかどうか疑問に思いましたか? たとえば、コード ブロックを 'atomically' で囲み、基礎となるプロセッサ アーキテクチャでコードをアトミ​​ック命令として実装する方法を理解させます (または、基礎となるアーキテクチャがサポートしていない場合はコンパイル時にエラーを生成します)。

PS gccにはいくつかの組み込み機能があることを知っています(少なくともCASの場合)

http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins

0 投票する
1 に答える
368 参照

thread-safety - 非整列データの連動操作

win32 の連動関数は、データに対するアトミック操作のメカニズムを提供します。それらは、スレッドセーフでマルチプロセッサセーフであると想定されています。

データが整列されていない場合はどうなりますか? 連動操作はまだアトミックですか?例: アラインされていない整数のインクリメント。

タイ

0 投票する
2 に答える
3128 参照

sql - トランザクション処理:ロールバックはいつ発生しますか?

最近、この質問は、トランザクションが一般的なコンテキストで何であるかの定義について投稿されました。この質問に対する一般的な答えは、トランザクションはアトミックな作業単位でなければならないというものでした。

私の質問はこの原子性に関連しています(私は思う)SQLストアドプロシージャでROLLBACKへの明示的な呼び出しをよく目にします。

ロールバックが明示的に要求されることは、一般的にトランザクション処理システムの一般的な要件ですか?

コミット時にエラーが発生した場合、ロールバックは自動的に発生しますか?

0 投票する
4 に答える
335 参照

multithreading - スレッドの安全性...私の「最善の」行動方針は何ですか?

データをスレッドセーフにする「最良の」方法は何だろうと思っています。

具体的には、リンクされたリストを複数のスレッドで保護する必要があります。あるスレッドがリンクされたリストから読み取ろうとしているときに、別のスレッドがデータを追加/削除したり、リスト全体を解放したりする可能性があります。ロックについて読んでいます。これらは最も一般的に使用されるアプローチのようですが、明らかに問題 (デッドロック) になる可能性があります。また、アトミック操作とスレッドローカルストレージについても読みました。

あなたの意見では、私の最善の行動方針は何ですか? ほとんどのプログラマーが使用するアプローチは何ですか? また、その理由は何ですか?

0 投票する
11 に答える
4846 参照

multithreading - 1つのアセンブラ命令は常にアトミックに実行されますか?

今日私はこの質問に出くわしました:

あなたはコードを持っています

worker2つの異なるスレッドから呼び出された場合counter、両方が終了した後、どのような値になりますか?

私は実際にそれが何でもあり得ることを知っています。しかし、私の内部の内臓は、それcounter++はおそらく単一のアセンブラー命令に変換され、両方のスレッドが同じコアで実行さcounterれる場合、20になると言っています。

しかし、これらのスレッドが異なるコアまたはプロセッサで実行されている場合、マイクロコードに競合状態が発生する可能性はありますか?1つのアセンブラ命令は常にアトミック操作と見なすことができますか?