POSIX スレッドがそのような保証を提供していることは知りません。スレッド共有オブジェクトへのアトミック アクセスのモデルがありません。POSIX スレッドの場合、変更の可視性を確保できる唯一の保証は、ある種のロックを使用することです。
最新の C、C11 (およびおそらく C++11) には、この種の質問に対するモデルがあります。スレッドとアトミック (フェンスとそのすべて) があり、あるスレッドによって行われた変更が別のスレッドから見えると想定する場合に、正確なルールを提供します。
C11 のスレッド インターフェイスは、POSIX スレッドの簡易バージョンであり、機能が少なくなっています。残念ながら、そのスレッド インターフェイスのセマンティクスの仕様はまだかなり曖昧であり、基本的に多くの場所でセマンティクスが欠落しています。しかし、C11 インターフェースと POSIX スレッドのセマンティクスを組み合わせることで、最新のシステムで物事がどのように機能するかをよく理解できます。
編集:したがって、メモリ同期を保証したい場合は、POSIXが提供するロックインターフェイスを使用するか、アトミック操作を使用してください。最新のすべてのコンパイラには、これらを提供する拡張機能があり、gcc およびファミリ (icc、opencc、clang) には一連のビルトインなどがあり__sync...
ます。Clang の最新バージョンでは、新しい C11 機能も既にサポートされてい_Atomic
ます。に近い他のコンパイラのインターフェイスを提供するラッパーも利用できます_Atomic
。