Как выполнить чтение атомарного 64b на x86 (Pentium и выше)? - PullRequest
3 голосов
/ 25 апреля 2009

Я хотел бы выполнить и атомарное чтение данных 64b с выравниванием 64b на платформе x86 (Pentium или выше гарантировано).

Есть ли способ сделать это? (И нет, я не хочу использовать критическую секцию или мьютекс для этого, я хочу, чтобы это было без блокировки).

Ответы [ 3 ]

6 голосов
/ 25 апреля 2009

Эта страница описывает, как это сделать. В основном вам просто нужно использовать lock cmpxchg8b.

4 голосов
/ 25 апреля 2009

Используйте операции блокировки, вот пример кода:

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

Это делает обмен сравнением с нулем и устанавливает p равным нулю, если он уже равен нулю, т.е. InterlockedCompareExchange возвращает исходное 64-битное значение, на которое указывает p.

0 голосов
/ 25 апреля 2009

Используйте функции блокировки * ().

Нет чтения как такового, но вы можете выполнить Add (), где добавляете 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...