InterlockedAnd vs InterlockedAdd

yolki

InterlockedAnd
Return value
The function returns the original value of the Destination parameter.
InterlockedAdd
Return value
The function returns the result of the operation.
*ДжекиЧанФейсПОЧЕМУ?*

vall

странно да, тем более что в x86 'xadd' возвращает старое значение.
но такая операция удобнее, вот всё.
В ядре у atomic*_add_return() такая-же семантика. А атомарные логические операции есть только побитовые test_and_set_bit/test_and_clear_bit/test_and_change_bit.
И совершенно не понятно где может понадобиться атомарная побитовая логическая операция со словом.

yolki

это я портирую одну либу с линуксей в винду.
__sync_and_and_fetch на что можно заменить?

vall

это гццшные builtin атомарные операции http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/_005f_005fsync-B...
построить им замену из студийных интрисиков наверно можно но придётся городить макросы с
switch (sizeof(*ptr)) { 1: 2: 4: 8: } чтоб работало правильно для всех типов.
поищи, возможно кто-то уже наваял такой компат лэйер.

yolki

это я понимаю, что гцц-шные built-in-ы.
подменить надо в одном-двух местах, без заморочки с типами.
пробую портировать на интрсинки :cool:

vall

*_and_fetch() заменеяются на атомарную операцию возвращающую старое значение плюс ещё раз эта-же операция над результатом. //КО
Оставить комментарий
Имя или ник:
Комментарий: