0

私は現在、学習体験としての趣味のプロジェクトとして、WindowsC++ライブラリをMacOSに移植しています。Win Interlocked *関数を使用していくつかのコードに出くわしたので、一般的にこのテーマについて調べようとしてきました。

ここSOで関連する質問を読んで、OSに応じてこれらの操作を行うさまざまな方法があることを理解しています。WindowsではInterlocked*、MacOSではOSAtomic *であり、コンパイラにはこのための組み込み(組み込み)操作があることもわかりました。

gccの組み込みのアトミックメモリアクセスを読んだ後、組み込みのものとOSAtomic*またはInterlocked*のものの違いは何ですか?つまり、gccを使用しているときにMacOSを使用している場合、OSAtomic *またはgcc組み込みのどちらかを選択できませんか?gccを使用してWindowsを使用している場合も同じです。

また、Windows Interlocked *には、インラインバージョンと組み込みバージョンの両方が用意されていることも読みました。組み込みまたはインラインのどちらかを選択するときに考慮すべきことは何ですか?

一般的に、OSには何を使用するかという複数のオプションがありますか?それとも、これも「状況次第」ですか?もしそうなら、それは何に依存していますか?

ありがとう!

4

1 に答える 1

1

本当の問題はこれです。

私たち全員が知っていて愛用している Intel チップセットには、メモリ書き込みの順序が明確に定義されていません。

インテル® 64 アーキテクチャーのメモリー注文に関するホワイトペーパー。このドキュメントでは、メモリの書き込み順序を慎重に定義する試みを提供します。

[このドキュメントは、Intel 64 and IA-32 Architectures Software Developer's Manual の Volume 3A に統合されました。]

Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3A: System Programming Guide Part 1 これはその文書の改訂版です。

http://www.intel.com/products/processor/manuals/

チップ自体は特定のメモリ書き込み順序を保証しないため、一貫性を保証するのは OS に任されています。

「依存する」とは、「ソフトウェアを構築している OS の API に依存する」ということです。

その他の資料: http://en.wikipedia.org/wiki/Memory_ordering

http://rsim.cs.illinois.edu/Pubs/10-cacm-memory-models.pdf

于 2011-01-11T12:57:57.343 に答える