私は、x86プラットフォーム(Pentium以上の保証付き)で64b整列64bデータのアトミックリードを実行したいと思います。x86(Pentium以上)で原子64bを読む方法は?
これを行う方法はありますか? (そして、いいえ、クリティカルセクションやミューテックスを使用したくないので、ロックフリーにしておきたいです)。
私は、x86プラットフォーム(Pentium以上の保証付き)で64b整列64bデータのアトミックリードを実行したいと思います。x86(Pentium以上)で原子64bを読む方法は?
これを行う方法はありますか? (そして、いいえ、クリティカルセクションやミューテックスを使用したくないので、ロックフリーにしておきたいです)。
This pageはそれを行う方法について説明を追加add()を発行することができます。基本的にはlock cmpxchg8b
を使用するだけです。
LONGLONG AtomicRead(LONGLONG* p)
{
return InterlockedCompareExchange64(p, 0, 0);
}
それはすでにゼロ-ieに等しいだ場合、これはゼロに対して交換を比較し、ゼロにPを設定しないが、それはNOOPです:
C++、asmではない - 彼はOSが提供するラッパーを望んでいる。 –
@Bank Xavier、なぜ彼はOSにラッパーを提供したいと思う?そして、あなたはどのOSを使用しているのか、どのように知っていますか? – Zifre
C++タグ。私はOSを知らないので、インターロッキングされた*()提案は役に立ちません。 –
ご確認ください - あなたは64ビットまたはバイトを意味しますか? – Alnitak
私はそれが64ビットだと仮定しています。バイトは本当に意味をなさないでしょう。 – Zifre
win32タグを持つのではなく、テキストでWindowsを記述した方が良いでしょう。私はタグが自分自身の情報ではなく、検索の助けになると見ています。 –