Russian Qt Forum

Qt => Работа с сетью => Тема начата: danquimby от Апрель 28, 2012, 19:39



Название: атомарные операции
Отправлено: danquimby от Апрель 28, 2012, 19:39
если под mingw сабж
ошибки вот такие , если использовать из класического mingw
Код:
(.text+0x104): undefined reference to `__sync_add_and_fetch_4'


Код:
#if defined (__GNUC__)

#define atomic_cas_uint32(p, o, n) __sync_val_compare_and_swap((uint32_t*)(p), (uint32_t)(o), (uint32_t)(n))
#define atomic_store_uint32(p, v) __sync_val_compare_and_swap((uint32_t*)(p), (uint32_t)(*p), (uint32_t)(v))

#define atomic_inc_uint32(p) __sync_add_and_fetch((uint32_t*)(p), 1)
#define atomic_dec_uint32(p) __sync_sub_and_fetch((uint32_t*)(p), 1)

#define atomic_inc_uint64(p) __sync_add_and_fetch((uint64_t*)(p), 1)
#define atomic_dec_uint64(p) __sync_sub_and_fetch((uint64_t*)(p), 1)

#endif // defined (__GNUC__)


Название: Re: атомарные операции
Отправлено: navrocky от Апрель 29, 2012, 20:15
Видимо все юзают кутэшные атомарные операции....

По делу: видимо надо какой-то рантайм прилинковать, раз линковщик не может найти. КО.


Название: Re: атомарные операции
Отправлено: danquimby от Май 03, 2012, 13:21
ну решили что бы в сборке под WindowsXP
не использовать
Код:
#define atomic_inc_uint64(p) __sync_add_and_fetch((uint64_t*)(p), 1)
#define atomic_dec_uint64(p) __sync_sub_and_fetch((uint64_t*)(p), 1)
так как их в кернеле нет