68kの古き良き時代では、スタックポインタと他のより汎用的なアドレスレジスタとの間の比較的一般的な関係のため、プリ/ポストポインタのインクリメント/デクリメントは多かれ少なかれアトミックであることが保証されていました。この動作は明らかに代替プラットフォーム上で最も効率的な実装を獲得できないかもしれない68kの人工物であるため、C仕様がこれらの操作の「アトミック性」に関して何の主張もしていないと仮定して正しいでしょうか?原子の前後のインデクシングの下限は?
答えて
私はC仕様がこれらの操作の「アトミック性」についての主張をしていないと仮定して正しいと思いますか?
はい。現在の標準(C99とC89、IIRCの両方)は、アトミック性については何の主張もしていない。これは間違いなくプラットフォーム固有であり、おそらくコンパイラにも依存します。
私が尋ねることができるのであれば、なぜこれらの操作がアトミックである必要がありますか?
答えRafeのおかげで;ちょうど私が探していた情報。古い68kシステムのアセンブリー出力を調べるとき、 "move.l d1、(a3)+"のような命令は、書き込みとポインターのインクリメントの原子的性質のためにマルチプロセス実装に適していました。ここ10年間で私の組立スキルがやや低下してきたので、「* a3 ++ = d1」に何らかの保証が付いているかどうか疑問に思った。 – Taliadon
@ Taliadonああ、そうです。あなたのコードが特定のOSや特定のコンパイラを持つ特定のアーキテクチャでのみコンパイルされることを知っているなら、アセンブリの出力を確認することができますが、それは価値があるよりも面倒です。 –
LOL、あなたは正しいと思います。フォーラムにあるいくつかの追加情報を読んだ後、私は現在のスキルが課題に合っているとは思っていません。それは私がそうでないと仮定するのが簡単になります。再び、情報をありがとう、それは非常に感謝しています。 – Taliadon
標準の指定とは無関係に、 "巨大な"ポインタの80x86ポインタの算術と代入はアトミックではありませんでしたが、ポインタのインクリメントとアサインメントはすべてのプラットフォームでアトミックリードとアトミックライトで構成されます。 32ビット以上ですまたはここで、ポインタは 'int'と同じサイズです(一部の組み込みプラットフォームには16ビットint、24ビットポインタなどがあります)。ただし、マルチプロセッサアーキテクチャ上では、リードモディファイライトシーケンスはほとんど決して原子単位を形成しません。
明示的に文書化されていない限り、原子性の保証はありません。現行のC標準の下では、はの可搬性コードで原子性を保証できることを意味します。原子オペレータは必ずプラットフォーム固有です。
@ninjaljは彼のコメントに注意しているように、C1xはアトミック演算子を追加します。
C標準には原子操作は全くありません。しかし、いくつかのGCC組み込み関数described hereがあり、C++0X stanardにいくつかのものがあります。また、コード内でPOSIXや他のマルチスレッドライブラリやインラインアセンブラを使用することもできます。
- 1. 原子数の制限
- 2. Apache Solr-親子インデクシング
- 3. 原子操作:フードの下で
- 4. firestoreアレイ状のデータ構造インデクシング制限firestoreドキュメントの
- 5. 原子炉StepVerifier.withVirtualTimeブロック無期限
- 6. 別の原子は、プログラム
- 7. プロジェクトの原子炉の動作原理
- 8. 原子のルビーメソッド?スキーム
- 9. 原子タイプのnumeric_limits
- 10. 原子フィードのカスタムタグ
- 11. 標準の原子boolと原子フラグの差
- 12. Objective-Cの原子/非原子の証拠
- 13. numpyでの多次元インデクシング
- 14. gccの原子演算子の式
- 15. エクトチェンジセットの空の原子
- 16. グリッドの最後の子どもたちはフレックスボックススペースの原因を掴む
- 17. アクティブレコードの事前ロードによる影響のパフォーマンス低下の原因
- 18. モンゴースの原子的更新
- 19. CentOS原子ホストのkubernetesクラスタ
- 20. CouchbaseとSpringの原子カウンター
- 21. 内部の原子関数
- 22. mingw-4.8.1原子の問題
- 23. `unique_ptr`の原子操作
- 24. Couchbaseのは、原子インクリメント(続く)(取得)
- 25. SVN原子はハウツー私は
- 26. thinkスフィンクス自動インデクシング
- 27. バッチ・4DテンソルTensorflowインデクシング
- 28. TypeScriptの下限パラメータ
- 29. Ionic2の時間の上限と下限
- 30. Javaジェネリックスの上限と下限のワイルドカード
C仕様のどれも、_any_操作のアトミック性について何も主張していません。 – Nemo
@Nemo:C1xは、新しいアトミック操作のアトミック性を保証します。 – ninjalj
私はC自体からの保証はないと思う。 (少なくとも、ポインタのインクリメントでは++ ptrのようなものではない)しかし、多くの場合、実際の結果は実際にはアトミックです。関連する議論については、http://stackoverflow.com/questions/879077/is-changing-a-pointer-considered-an-atomic-action-in-cを参照してください。 – shelleybutterfly