Альтернатива функции __sync_val_compare_ и _swap для старого компилятора gcc

#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. Таким образом, любой может использовать вашу программу, независимо от того, насколько непонятна их система, если они готовы использовать достаточно современный компилятор.