Почему существуют как свободные, так и функции-члены для операций сравнения и подкачки?


Стандартная библиотека C++ содержит каксвободные функции , так ифункции-члены для атомарных операций сравнения и подкачки.

Как отмечено для свободных функций:

Эти функции определяются в терминах функций-членов std:: atomic:

  1. obj - > compare_exchange_weak (*ожидаемый, желаемый)
  2. obj - > compare_exchange_strong (*ожидаемый, желаемый)
  3. obj - >compare_exchange_weak (*ожидаемый, желаемый, succ, fail)
  4. obj - >compare_exchange_strong (*ожидаемый, желаемый, succ, fail)

В чем причина наличия свободных функций? Разве недостаточно иметь только функции-члены? Разве они не делают то же самое?

1 6

1 ответ:

Согласованность с операциями C stdatomic.h.

Если вы используете свободные функции, то один и тот же код, манипулирующий атомарностью, будет работать как в C, так и в C++, причем только typedef должен быть условно определен.