問題タブ [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.
multithreading - ロック (スレッド化) はアトミックですか?
これはばかげた質問のように聞こえるかもしれませんが、マルチスレッド アプリでリソースをロックすると、そのリソースで発生する操作はアトミックに行われるのでしょうか?
IE: リソースがロックされている間に、プロセッサが中断されたり、コンテキストの切り替えが発生したりする可能性はありますか? そうである場合、そのプロセスを終了するために再びスケジュールされるまで、他の誰もこのリソースにアクセスできません。高価な操作のように聞こえます。
c++ - 競合するアトミック操作は互いに飢える可能性がありますか?
2 つのスレッドを持つプログラムを想像してください。次のコードを実行しています (CAS はCompare and Swapを指します)。
0xdeadbeef が「テスト」に書き込まれないように、スレッド B がスレッド A の CAS を永続的に失敗させる可能性はありますか? それとも、自然なスケジューリングのジッタは、実際にはこれが決して起こらないことを意味するのでしょうか? スレッド A の while ループ内で何らかの作業が行われた場合はどうなるでしょうか。
c - fwrite はアトミックですか?
簡単な質問:
プログラムにログを追加する必要があります。
2 つのプロセスが同じファイルに対して「fwrite」を使用するが、同じファイル記述子ではない場合、書き込まれるログ メッセージはアトミックまたは混合になります。長さ制限はありますか?
ANSI-C の動作が定義されているか、または実装が定義されていますか? 後者の場合、MacOSX、Linux、および Windows MSVC には何がありますか?
.net - .NET でのアトミック ファイル コピー
System.IO.File.Copy(...) 関数を使用してファイルをコピーするサーバー アプリを構築しています。私のファイルはかなり大きくなる可能性があるため、マシンがクラッシュした場合、コピー中にクラッシュする可能性がかなりあります。
サービスを再起動した後、コピー タスクを取得して続行できるはずです。コピーが正常に完了したか、サーバー クラッシュによって中断されたかを検出するにはどうすればよいですか?
私の現在の計画は、ファイルを一時的な名前にコピーし、コピーが完了したら、ファイルの名前を最終的な名前に変更することです。このようにして、ファイルの命名により、クラッシュの状態情報を引き継ぐことができます。
良い/より良い提案はありますか?
編集: ターゲット OS は Win2003 であるため、トランザクション NTFS は利用できません
.net - .NETではFile.Delete()はアトミックです
ターゲットOS:Win2003
ファイル操作のアトミック性に関する他のSOの質問に投稿されているように、Win32は単にトランザクション用に設計されていません。それでも、ファイルの削除が非アトミックである可能性があるのではないかと思います。結局のところ、それは削除されるかどうかのどちらかです。または、削除中にシステムクラッシュなどが原因で、ファイルがNTFSファイルシステム上の他の中間状態のままになる可能性がありますか?
c# - C#マルチスレッドリスト操作
私がこのようなものを持っている場合(擬似コード):
両方の関数を並行して実行すると、マルチスレッドの問題(または予期しない動作)が発生する可能性はありますか?
ユースケースはエラーのリストであり、いつでもクリアできます(新しい空のリストを割り当てるだけです)。
編集:私の仮定は
- 1つのスレッドだけが要素を追加します
- クリア操作が問題なく成功する限り、忘れられた要素は問題ありません(つまり、クリアしてから新しい要素を追加するまでの競合状態)。
- .NET 2.0
objective-c - Objective CでBOOLの読み取り/書き込みはアトミックですか?
2 つのスレッドが「同時に」BOOL を YES に設定するとどうなりますか?
c++ - x86、arm、GCC、およびiccで動作するLinuxでアトミック操作を実行するには?
現代のすべての OS は、現在、いくつかのアトミック操作を提供しています。
- Windowsには
Interlocked*
APIがあります - FreeBSD には
<machine/atomic.h>
- ソラリスは
<atomic.h>
- Mac OS X には
<libkern/OSAtomic.h>
Linuxの場合、そのようなものはありますか?
- x86、x86_64、 armなど、ほとんどの Linux 対応プラットフォームで動作する必要があります 。
- 少なくとも GCC と Intel Compiler で動作する必要があります。
- glib や qt のような 3rd par ライブラリを使用する必要はありません。
- C++ で動作させる必要があります (C は必要ありません)
問題:
- GCC アトミック ビルトイン
__sync_*
は、すべてのプラットフォーム (ARM) でサポートされているわけではなく、Intel コンパイラでもサポートされていません。 - 私の知る限り
<asm/atomic.h>
、ユーザー空間では使用しないでください。私はまったく使用していません。また、Intel コンパイラで動作するかどうかもわかりません。
助言がありますか?
関連する質問がたくさんあることは知っていますが、そのうちのいくつかは__sync*
私 (ARM) には実現不可能であると指摘し、いくつかは を指摘していasm/atomic.h
ます。
GCC用にこれを行うインラインアセンブリライブラリがあるかもしれません(ICCはgccアセンブリをサポートしています)?
編集:
追加操作のみの非常に部分的な解決策があります (アトミック カウンターの実装は許可しますが、CAS を必要とする自由構造のロックは許可しません)。
を使用する場合libstc++
(インテル コンパイラは を使用libstdc++
) 、または__gnu_cxx::__exchange_and_add
で定義されたものを使用できます。コンパイラのバージョンに依存します。<ext/atomicity.h>
<bits/atomicity.h>
ただし、CAS をサポートするものを見たいと思っています。
c - アトミック操作を実行するための関数
C ランタイム ライブラリまたはその他のユーティリティ ライブラリでサポートされているアトミック操作 (整数のインクリメント/デクリメントなど) などを実行する関数はありますか?
はいの場合、そのような関数を使用してどの操作をアトミックにすることができますか?
このような関数を使用することは、mutex などの通常の同期プリミティブよりも有益でしょうか?
OS : Windows、Linux、Solaris、VxWorks
c++ - ポータブル C++ アトミック スワップ (Windows - GNU/Linux - MacOSX)
ロックフリーのアトミックスワップ機能を提供する無料の移植可能な(Windows、GNU/Linux & MacOSX) ライブラリはありますか?
そうでない場合、これらの各プラットフォームにどのように実装しますか? (VC++ または g++ を使用する x86)
ありがとう