#c #multithreading #pthreads
#c #многопоточность #pthreads
Вопрос:
В моем проекте есть следующий метод:
long compare( long* avar, long comp, long exc )
{
return __sync_val_compare_and_swap( avar, comp, exc );
}
Но если я хочу скомпилировать свой проект с использованием gcc версии (более старой версии, например, 3.4.3), которая не поддерживает AtomicBuiltins, каков альтернативный путь решения нашей проблемы? Какие альтернативные функции ( альтернатива __sync_val_compare_и_swap ) или блок функций мы можем использовать вместо __sync_val_compare_и_swap?
Ответ №1:
Единственная альтернатива, которую я бы увидел, это то, что вам придется реализовать это через ассемблер. Я думаю asm
, что расширение gcc предшествует каменному веку, поэтому любой компилятор, который вы можете использовать, поддержит это.
Реализовать эту конкретную функцию не так сложно, и вы легко найдете ссылки. Однако вам придется предоставлять разные реализации для каждой архитектуры, которая вам интересна.
Комментарии:
1. Простой и вежливый подход заключается в использовании встроенного asm для известных вам и официально поддерживаемых archs, а для всех остальных — возврат к расширениям gcc 4. Таким образом, любой может использовать вашу программу, независимо от того, насколько непонятна их система, если они готовы использовать достаточно современный компилятор.