_>Как применить данную функцию для типа отличного от LONG. В частности есть массив BYTE* ImageInfo, нужно заменить конкретный элемент атомарно.
во-первых выделять массив ImageInfo на выровненный по 4 байтовой границе адрес
во-вторых выделять под массив кратное 4м байтам количество памяти
в-третьих както так (не компилял, не тестил):
Здравствуйте, yury_alpatov, Вы писали:
_>Как применить данную функцию для типа отличного от LONG. В частности есть массив BYTE* ImageInfo, нужно заменить конкретный элемент атомарно.
Здравствуйте, yury_alpatov, Вы писали:
_>Как применить данную функцию для типа отличного от LONG. В частности есть массив BYTE* ImageInfo, нужно заменить конкретный элемент атомарно.
В VC2010 есть intrinsic функция _InterlockedCompareExchange8()
Т.е. делаешь как-то так:
Здравствуйте, rus blood, Вы писали:
RB> __asm RB> { RB> mov edx, DWORD PTR ps RB> xor eax, eax RB> mov al, s RB> xchg BYTE PTR [edx], al RB> } RB>PS RB>Использование на свое усмотрение.
В х64 нет встроенного ассемблера. И ты вроде бы lock забыл?
Здравствуйте, CoolCmd, Вы писали:
CC>В х64 нет встроенного ассемблера.
В компиляторе от MS нет. В нормальных — есть.
CC> И ты вроде бы lock забыл?
xchg автоматически выставляет lock
Здравствуйте, mike_rs, Вы писали:
CC>>В х64 нет встроенного ассемблера. И ты вроде бы lock забыл? _>есть, при использовании компилятора intel
И это меня кстати недавно безумно порадовало.
Здравствуйте, Banned by IT, Вы писали:
CC>>В х64 нет встроенного ассемблера. BBI>В компиляторе от MS нет. В нормальных — есть.
Учитывая, что нормальный компилятор есть только у МС, твое предложение не имеет смысла.
CC>> И ты вроде бы lock забыл? BBI>xchg автоматически выставляет lock
Наоборот!
Здравствуйте, CoolCmd, Вы писали:
CC>>>В х64 нет встроенного ассемблера. BBI>>В компиляторе от MS нет. В нормальных — есть. CC>Учитывая, что нормальный компилятор есть только у МС, твое предложение не имеет смысла.
Ви таки делаете мне смешно.
По последним моим тестам оптимизации для криптографических примитивов ICC сделал MSVC как бык овцу: скорость работы кода отличалась в 2 раза.
CC>>> И ты вроде бы lock забыл? BBI>>xchg автоматически выставляет lock CC>Наоборот!
Это как? Префикс Lock автоматически делает xchg?
On most instructions a lock prefix must be explicitly used except for the xchg instruction where the lock prefix is implied if the instruction involves a memory address.