О моделях памяти в spinlock mutex

179
01 января 2022, 11:00

В книге "Параллельное программирование на С++ в действии" приводится пример спинлока.

class spinlock_mutex {
    std::atomic_flag flag;
public:
    spinlock_mutex()
        : flag(ATOMIC_FLAG_INIT) {}
    void lock() {
        while(flag.test_and_set(std::memory_order_acquire));
    }
    void unlock() {
        flag.clear(std::memory_order_release);
    }
};

Мне кажется, что операции с атомарным флагом в lock и unlock синхронизировать не обязательно. В unlock флаг просто сбрысывается, а в lock используется цикл с CAS операцией, которая установит флаг только проверив перед этим, что он снят, и сделает это атомарно. Можно ли здесь в обоих случаях заменить модель памяти на std::memory_order_relaxed?

READ ALSO
Синхронная прокрутка нескольких listbox winforms c#

Синхронная прокрутка нескольких listbox winforms c#

Есть 4 листбокса в winforms, количество айтемов там всегда одинаковое, как сделать синхронную прокрутку с клавиатуры(стрелок), колесика мышки...

158
Проблема с выводом значения по умолчанию

Проблема с выводом значения по умолчанию

Я написал запрос и он работает верно, но когда дело дошло до добавления значения по умолчанию, я получаю ошибку:

83