В книге "Параллельное программирование на С++ в действии" приводится пример спинлока.
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?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть 4 листбокса в winforms, количество айтемов там всегда одинаковое, как сделать синхронную прокрутку с клавиатуры(стрелок), колесика мышки...
Я написал запрос и он работает верно, но когда дело дошло до добавления значения по умолчанию, я получаю ошибку: