3

x86 プラットフォーム (Pentium 以上を保証) で 64b アラインされた 64b データのアトミック読み取りを実行したいと考えています。

これを行う方法はありますか?(いいえ、これにはクリティカルセクションやミューテックスを使用したくありません。これをロックフリーにしたいのです)。

4

3 に答える 3

6

このページでは、その方法について説明します。基本的には使うだけlock cmpxchg8bです。

于 2009-04-24T21:16:59.133 に答える
4

Interlocked 操作を使用します。サンプル コードは次のとおりです。

LONGLONG AtomicRead(LONGLONG* p)
{
    return InterlockedCompareExchange64(p, 0, 0);
}

これは、ゼロに対する比較交換を行い、すでにゼロに等しい場合は p をゼロに設定します。つまり、noop です。InterlockedCompareExchange は、p が指す元の 64 ビット値を返します。

于 2009-04-24T21:48:03.523 に答える
0

Interlocked*() 関数を使用します。

読み取り自体はありませんが、0 を追加する場所に Add() を発行できます。

于 2009-04-24T21:16:43.957 に答える