Правильное использование __sync_bool_compare_and_swap? - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь сравнить блокировку и блокировку свободных структур данных, и я надеялся использовать метод __sync_bool_compare_and_swap , описанный здесь .

В основном единственные две операции, которые мне нужно поддерживать, этобезопасное увеличение и уменьшение текущего значения типа int, и вот как я его реализовал:

int withdraw(CAccount* account, int amount) {
    int expected;
    int new;
    int* pCurrent = &(account->balance);
    do {
        expected = *pCurrent;
        new = expected - amount;
    } while (!__sync_bool_compare_and_swap(pCurrent, expected, new));
    return amount;
}

Я не могу найти ни одного примера использования этого метода в другом месте, поэтому яЯ не совсем уверен, если это так, как это должно быть использовано, поэтому, пожалуйста, поправьте меня, если это не правильно!

Также это одна из ситуаций, когда val версияэтот метод предпочтительнее, чем bool ?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...