LINUX.ORG.RU

Как портировать?


0

0

Доброго времени суток, всё знающий All!

Вот есть кусок кода который работает под freebsd и win32:

void set_int (u_int* target, u_int value)
{
#ifdef WIN32
 InterlockedExchange((LONG *)target, value);
#else
 atomic_readandclear_int(target);
 atomic_set_int(target,value);
#endif
} 

void set_char (u_char* target, u_char value)
{
#ifdef WIN32
 *target = value; 
#else
 atomic_readandclear_char(target);
 atomic_set_char(target,value);
#endif
}

Как это можно портировать под Linux?
Под Linux'ом нет функций таких.

Или я плохо смотрел.

Спасибо.

С уважением, Денис.
anonymous

Береш код этих недостающих функций и собираеш под Linux. Если трудно, то можно так: береш спек по этим функциям и делаеш свою реализацию. Если и это трудно - иди в админы или еще куда-нибудь.

Esh ★★★★
()

Если по простому, то в обоих случаях просто:

*target = value;

Но вот насчёт атомарности...
В книжке "Advanced Linux Programming" сказано, что в Linux "операции присваивания целочисленных переменных и указателей всегда атомарны" (именно поэтому sig_atomic_t эквивалентен простому int), но тут помниться был такой флейм на эту тему, что я не берусь что-либо утверждать.

unDEFER ★★★★★
()
Ответ на: комментарий от unDEFER

Кстати, нашёл хороший документ по этому поводу:
/usr/src/linux/Documentation/atomic_ops.txt
:-)

unDEFER ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.