Переносимое выравнивание слов с атомарными операциями C11 - PullRequest
0 голосов
/ 05 января 2019

Я хотел бы атомарно поменять слово состояния, используя обычный шаблон CAS:

extern int status;

int change_state(void)
{
    while (true)
    {
        int old = atomic_load(&status);
        int new = prepare_new_status();
        if (atomic_compare_exchange_strong(&status, &old, new))
            return old;
    }
}

Но так как old может быть не выровнен или может быть переменной регистра, является ли &old переносимым?

Если нет, как правильно атомарно обновить слово состояния в архитектурах, где int доступ должен быть выровнен по слову?

...