Решаем проблему конкурентного доступа с помощью Lock-Free

C___Deep_27.12_site-5020-00967a.png

В одной из прошлых заметок мы приводили пример конкурентной обработки двух конфликтных запросов, которые возникли в связи с одновременным бронированием одного и того же номера двумя разными менеджерами отеля.

Проблема атомарности на практическом примере

C___Deep_14.12_site-5020-4bbf4c.png

В одной из предыдущих заметок мы упоминали о Lock-Free алгоритмах и сложностях, с ними связанных. Какая ситуация вообще приводит к проблемам? Лучше всего понять это помогает простейший пример бронирования номеров в отеле.

Будьте внимательны, используя Lock-Free алгоритмы!

Cplus_Deep_11.12_site-5020-1f5428.png

Не секрет, что Lock-Free алгоритмы и структуры данных существенно усложняют проект. Это подтверждается как моим собственным опытом, так и Core Guidelines (набором рекомендаций и правил по написанию кода на С++).

Синхронная асинхронность в C++

С___Deep_10-5020-8d2073.09_site.png

Наверняка все, кто изучал старый добрый стандарт C++11, знают о существовании в стандартной библиотеке вызова std::async, который позволяет выполнить некий код асинхронно (более точно – поведение указывается первым параметром вызова).

Согласно документации, вызов с параметром std::launch::async обещает выполнить пользовательский код в отдельном потоке. Посмотрим на приведённый ниже код.

Какие есть проблемы у систем сборки языка C++?

С___Deep_23-5020-25b88f.08_Site.png

Проблема только одна – отсутствие каких бы то ни было стандартных систем сборки. Но нас спасут нестандартные! В данном случае великий и ужасный CMake, в котором есть две переменные с не совсем очевидными отличиями.

Сделайте «снимок» кода С++, посмотрим что у вас!

С___Deep_9-5020-7511bd.10_site.png

Современный C++ породил странный страх сделать что-то недостаточно эффективно. По этой причине в коде часто можно встретить std::move совершенно не к месту. Или какие-то сложные телодвижения, нацеленные на избавление от копирования возвращаемого значения.

Иногда кажется, что это для многих стало чем-то вроде фобии. А-а-а-а, я тут лишнего скопировал! И пропал на час, придумывая как избавиться от него.

Копилка с дыркой: что такое опыт и стоит ли хранить всё?

Cplus_Deep_11.3_site-5020-6776fc.png

Очень мы любим накапливать опыт. Где-то по крупицам, где-то сквозь бессонные ночи, где-то перенимая у более опытных, набиваем свою собственную копилку опыта. И кажется всё правильно делаем, ведь не может быть такого, чтобы опыт был вреден. Столько всего пройдено и осмыслено. Столько всего применено и опробовано. Не голова, а сокровище.