в документации не говорится, что происходит, когда ожидаемые oldval
и newval
совпадают. Ниже приведено g cc do c:
Версия «bool» возвращает true, если сравнение прошло успешно, и записано newval .
Таким образом, если newval и oldval - это одно и то же, фактически нет записи. Поэтому следующий код всегда вернет true, если *ptr == 0
?
__sync_bool_compare_and_swap(&ptr, 0, 0)
Спасибо