Списки в C++. Односвязный список

Cplus_deep_22.8-5020-3781cf.png

Стандартная библиотека C++ включает достаточно много структур данных. Среди них есть списки, очереди, стеки, множества и т. д. Но если вы хотите эффективно их использовать, необходимо понимать особенности их работы. В этой статье поговорим о базовой структуре в С++ — односвязном списке.

Случайное число. Генератор в C++

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

Обзор графических библиотек C++

Cplus_Deep_11.06_site-5020-ecd1fe.png

Одним из наиболее мощных и популярных языков программирования является C++. На нём ежедневно пишут сотни приложений, нередко использующих GUI. Но работа с графикой не всегда удобна для программиста, поэтому на помощь приходят графические библиотеки, делающие разработку графической части быстрее и удобнее. О них и поговорим.

Решаем проблему конкурентного доступа с помощью 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 обещает выполнить пользовательский код в отдельном потоке. Посмотрим на приведённый ниже код.