問題タブ [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 投票する
1 に答える
678 参照

ms-access - MS Access アトミック トランザクション

複数のユーザー間でマイクロソフト アクセス トランザクションをアトミックにする方法はありますか?

そうではないことを暗示しているように見えるこれを見つけましたが、アクセスの原子性がドライバー固有であるかどうか疑問に思っています。

0 投票する
7 に答える
37881 参照

c - UNIXポータブルアトミックオペレーション

pthreadを使用したポータブルスレッドに似たアトミック変数操作のための(POSIX-)ポータブルな方法はCにありますか?

アトミック操作は、アトミックに実行される「インクリメントアンドゲット」のような操作です。つまり、コンテキストスイッチが操作に干渉することはありません。Linuxカーネルスペースでは、atomic_tタイプにする必要があり、Javaでは、java.util.concurrent.atomicパッケージがあります。

Linuxでは、atomic.hファイルはアトミック操作を提供しますが、インクルードはプラットフォームに依存します。たとえば#include <asm-x86_64/atomic.h>、MacOSXでは同様の方法で使用できません。

0 投票する
6 に答える
5210 参照

c# - プロパティへの読み取りと書き込みは C# でアトミックですか?

boolやなどの C# の特定のプリミティブ型に対する読み取りと書き込みintはアトミックです。

(C# 言語仕様のセクション 5.5、「5.5 変数参照の原子性」を参照してください。)

しかし、プロパティを介してそのような変数にアクセスするにはどうすればよいでしょうか? それらがアトミックでスレッドセーフでもあると仮定するのは合理的ですか? たとえば、以下の読み取りはMyPropertyアトミックでスレッドセーフですか?:

自動実装されたプロパティはどうですか?

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

unix - UNIXではファイルはアトミックに追加されますか?

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

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

python - Django、ビューをアトミックにする方法は?

株式市場をシミュレートするための単純な django アプリがあり、ユーザーが入って売買します。彼らが取引することを選択したとき、

  1. 市場価格が読み取られ、
  2. 買い/売り注文に基づいて、市場価格が増減します。

これがdjangoでどのように機能するかはわかりませんが、ビューをアトミックにする方法はありますか? つまり、ユーザー A のアクションが価格を読み取る可能性があることを懸念していますが、注文のために価格が更新される前に、ユーザー B のアクションが価格を読み取ります。

このオンラインのシンプルでクリーンなソリューションが見つかりませんでした。ありがとう。

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

git - git がリモート タグの移動を許可する理由、またはアトミック テスト アンド セットに git-tag を使用できない理由

同じリポジトリの別々のクローン (通常は別々のコンピュータ) 内で 2 つの同様のプロセスが並行して実行されているという問題があります。プロセスが実行されるたびに、リモートから最新のタグを取得し、検出したタグに基づいて一意の番号を推測します。

たとえば、これらのタグがリモートに存在する場合: 1.0 1.1 1.2 1.3 プロセスは次の番号として 1.4 を選択します。

プロセスが開始する前に、新しいタグを作成し、これをリモートにプッシュします。

アイデアは、これがアトミックに数値を選択する方法であるというものでした。他のプロセスは、同時に見ている場合、1.4 を使用することを決定する可能性がありますが、そのタグをプッシュすると、1.4 が既に存在することを発見し、代わりに 1.5 を選択する必要があります (そして再試行します)。

私の希望は、git タグのプッシュをアトミックとして扱えることでした。

残念ながら、奇妙な理由により、git は特定の状況でリモートタグを移動することを許可しています!

たとえば、タグ 1.4 が origin/master に配置され、プッシュされたとします。もう 1 つのプロセスは、たとえば origin/master^ にタグ 1.4 を配置しようとしていますが、これにはタグを後方に移動する必要があります。Git はこれを「非早送り」エラーで拒否します。

プロセスA:

プロセス B:

プロセス B はこれを使用して、代わりに 1.5 を試すことができます。

しかし、次の状況を考慮してください。

プロセスA:

プロセス B:

おー。それは残念です-gitは、このタグがリモートに既に存在することを示していませんでした。実際、-v を使用すると、次のようになります。

わかりましたので、ある種の stderr リダイレクトを実行し、「 = 」を検索すると、プロセス B は 1.4 が既に使用されていると判断できます。

しかし、それは少しばかげています。さらに悪化します:

プロセスA:

プロセス B:

アーグ!何?Git は警告なしにリモート タグを移動しました!

したがって、git のリモート タグは根本的に壊れているように思えます。明示的な要求なしに単に「移動」するべきではありません。さらに言えば、デフォルトで移動を拒否する必要があります。

また、git-tag コマンドは、タグをアトミックにテストおよび設定する方法を提供する必要があります。

しかし、明らかにそうではありません。最初に git fetch を実行しても、まだ競合のウィンドウが存在するため、役に立ちません。競合があったとしても、3 つのシナリオのいずれかでタグが移動するだけです。

ここで何が起こっているのですか?

タグをテストして設定する別の方法はありますか?

そうでない場合、自動化されたビルド環境でビルド番号をどのように割り当てて予約しますか? 2 つのプロセスが誤って同じビルド番号を取得したことを確実に検出するにはどうすればよいでしょうか?

git 1.6.1.2 を使用。

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

iphone - アトミック ストア タイプとは

Apple のサイトで Core Data のリファレンスを読みました。しかし、アトミック ストア タイプとは何を意味するのでしょうか。彼らは「全体を読んで書かなければならない」ということを書いています。

誰かがこれを明確にしてもらえますか?

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

c# - Doublesをパラメーターとして受け入れるInterlocked.Addのオーバーロードがないのはなぜですか?

Threading.Interlockedクラスが提供するアトミック性に完全に感謝します。ただし、Add関数が2つのオーバーロードしか提供しない理由はわかりません。1つは整数用、もう1つはLong用です。Doubles、またはその他の数値タイプを使用しないのはなぜですか?

明らかに、Doubleを変更するための意図された方法はCompareExchangeです。これは、Doubleの変更は、Integerの変更よりも複雑な操作であるためだと思います。それでも、CompareExchangeとAddの両方が整数を受け入れることができる場合、両方がDoubleを受け入れることができない理由は、私にはわかりません。

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

winapi - アトミック x86 命令と MS の InterlockedCompareExchange ドキュメントのアライメント要件は?

Microsoft は、InterlockedCompareExchangeアトミック コンペア アンド スワップ操作を実行するための機能を提供しています。組み込みもあります。_InterlockedCompareExchange

x86 では、これらはlock cmpxchg命令を使用して実装されます。

ただし、これら 3 つのアプローチに関するドキュメントを読んでみると、整合要件については一致していないようです。

Intel のリファレンス マニュアルには、アラインメントについては何も記載されていません (アラインメント チェックが有効で、アラインされていないメモリ参照が行われた場合、例外が生成されること以外は)

接頭辞も調べましたがlock、具体的には次のように述べています

LOCK プレフィックスの整合性は、メモリ フィールドのアラインメントの影響を受けません。

(私のものを強調)

そのため、インテルはアライメントは無関係だと言っているようです。操作は何があってもアトミックになります。

_InterlockedCompareExchange組み込みのドキュメントにもアラインメントについては何も記載されていませんが、関数InterlockedCompareExchange は次のように記載されています

この関数のパラメーターは、32 ビット境界に揃える必要があります。そうしないと、関数はマルチプロセッサ x86 システムおよび非 x86 システムで予期しない動作をします。

それで、何が得られますか?命令が使用できないInterlockedCompareExchange486 より前の CPU でも関数が機能することを確認するためだけのアライメント要件はありますか? cmpxchg上記の情報に基づいている可能性が高いようですが、信頼する前に確認したいと思います。:)

それとも、原子性を保証するために ISA でアラインメントが必要なのですか? Intel のリファレンス マニュアルの間違った場所を探しているだけですか?

0 投票する
8 に答える
482 参照

c - Cでの原子性保証について

x86マシンでは、inc、addlなどの命令はアトミックではなく、SMP環境では、ロックプレフィックスなしでそれらを使用することは安全ではありません。ただし、UP環境では、inc、addl、およびその他の簡単な命令が中断されないため、安全です。

私の問題は、次のような経営幹部レベルのステートメントが与えられた場合です

Cコンパイラが常に次のようなUPセーフな命令を使用するという保証はありますか?

しかし、UP環境でも、スレッドセーフでない命令(コンテキストスイッチによって中断される可能性のあるいくつかの命令にCステートメントを実装するなど)はありませんか?