Библиотека C/C++ разработчика | cpp, boost, qt
19.8K subscribers
1.91K photos
56 videos
16 files
4.14K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
Download Telegram
🧠 Когда mutex — не панацея

Многопоточное программирование в C++ часто сводится к простой мантре: «Есть shared data — добавь mutex». Но реальность куда интереснее, и правильная синхронизация требует понимания нюансов.

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

std::shared_mutex (C++17) идеален для ситуаций с частым чтением и редкой записью — классический reader-writer lock. std::atomic обеспечивает lock-free синхронизацию для простых типов, но требует понимания memory ordering.

Ключевой момент — гранулярность блокировок. Слишком крупные критические секции убивают параллелизм, слишком мелкие создают оверхед. В high-performance системах часто используют lock-free структуры данных или hybrid подходы: например, thread-local буферы с периодической синхронизацией через lock.

Не стоит забывать про std::condition_variable для координации потоков и std::latch/std::barrier (C++20) для более сложных паттернов синхронизации. Правильный выбор примитива может дать разницу в производительности на порядок.


А как вы подходите к выбору механизма синхронизации? Полагаетесь на универсальный mutex или анализируете паттерны доступа к данным?



Библиотека C/C++ разработчика

#междусобойчик
4👍4
Команда Яндекса — это профессионалы, которые одержимы своим делом и решают задачи, где нет готовых решений.

Сейчас мы ищем сильных бэкенд-разработчиков — с опытом от 3 лет на C++, Python, Java или Go. Участвуйте в Week Offer, чтобы получить офер онлайн, всего за неделю.

Как будет проходить Week Offer Backend?

• Подайте заявку до 12 ноября.
• Пройдите технические секции 15 и 16 ноября.
• Познакомьтесь с командами и получите офер 17–21 ноября.

Если вам интересно строить полезные сервисы вокруг ИИ-технологий, проводить исследования и превращать их в реальные продукты для миллионов пользователей — переходите по ссылке. На сайте собрали все подробности.
2🥱2😁1
🐸 Подборка вакансий для C++-разработчиков за неделю

C developer — Удалёнка

Middle+ / Senior C++ developer — Удалёнка

Senior разработчик C++ в команду Core — Удалёнка

Middle Разработчик на C/C++ под Linux — от 250 000 и до 300 000 ₽

Главный разработчик С++ — Удалёнка

Senior Программист C/С++ — от 400 000 до 600 000 ₽ Гибрид (Москва)

Middle С++ Developer — Гибрид (Москва)

Software Engineer C/C++ — Гибрид (Москва) Удалёнка

Библиотека C/C++ разработчика
👍3
🎁 И мозг прокачать, и макбук утащить!

Proglib.academy разыгрывает MacBook Pro 14 (M3 Pro, 36 GB, 1 TB SSD) 💻

Условия:

1️⃣ Покупаешь любой курс Proglib до 15 ноября.
2️⃣ Проходишь минимум 2 учебные недели (можно осилить за два вечера).
3️⃣ Пишешь куратору в чат своего курса: #розыгрыш.

Что за курсы?

Математика для Data Science (6 месяцев боли и просветления).
Основы Python, ML, алгоритмы, AI-агенты и даже курс для тех, кто в IT, но не кодит.

👉 Участвовать в розыгрыше
❤‍🔥1😁1
🔥 Highlight — must-have расширение для VS Code

Если надоело искать TODO и FIXME в коде, то расширение Highlight превратит их в яркие цветные метки, которые невозможно пропустить.

😎 Что умеет:

• Подсвечивает TODO, FIXME, NOTE, HACK и другие маркеры прямо в коде
• Настраиваемые цвета и стили для каждого типа комментариев
• Поддерживает кастомные регулярки для своих меток
• Работает со всеми языками, включая C++

✍️ Пример использования:

// TODO: оптимизировать этот алгоритм
// FIXME: утечка памяти здесь
// NOTE: важное замечание про thread-safety


Все эти комментарии будут выделены разными цветами — красным для FIXME, жёлтым для TODO и т.д.

❗️Особенно полезно в больших проектах, где легко забыть о временных хаках. Устанавливается в пару кликов, настраивается через settings.json.

👉 Ссылка на расширение

Библиотека C/C++ разработчика

#буст
6👍4❤‍🔥1
🔧Видео: 5 способов улучшить C++ код

Нам часто приходится думать об оптимизации написанных нами приложений. Автор канала The Cherno разбирает пять вариантов для решения данной задачи.

✍️ Разбираем типичные ошибки и оптимизируем код:

Перечисления вместо строк для типов ресурсов
UUID вместо строковых идентификаторов
Чистый код в синглтонах (delete безопасен с nullptr)
Минимум shared_ptr — используйте стек и ссылки
Правильная семантика владения объектами

👉 Видео

Библиотека C/C++ разработчика

#линкер_рекомендует
👍3
💻 ВАЖНО: макбук ещё не забрали!

Proglib.academy продолжает розыгрыш MacBook Pro 14» (M3 Pro, 36 Гб, 1 Тб SSD).

Что нужно для участия?

— Берёшь любой курс Академии до 15 ноября.
— Проходишь хотя бы 2 недели обучения (можно за два дня).
— Пишешь куратору #розыгрыш. Всё — ты в игре!

Что за курсы?

▫️Алгоритмы и структуры данных — если хочешь готовиться к собесам в Яндекс, FAANG и не сидеть на джуне вечно.

▫️Архитектуры и шаблоны проектирования — учат думать как senior, а не просто писать код.

▫️ Python, математика для DS, основы IT и другие темы — можно стартовать с нуля или усилить то, что уже знаешь.

👉 Влетай, не думай!
😁2
✏️ Потокобезопасная инициализация через std::call_once

Инициализация ресурсов в многопоточном приложении — классическая головная боль. std::call_once решает эту проблему элегантно: гарантирует вызов функции ровно один раз, даже если несколько потоков пытаются сделать это одновременно. Забудьте про ручные мьютексы и double-checked locking с их подводными камнями.

#include <mutex>
#include <memory>
#include <iostream>

class DatabaseConnection {
public:
static DatabaseConnection& getInstance() {
// std::call_once гарантирует однократный вызов лямбды
// даже при конкурентном доступе из разных потоков
std::call_once(initFlag, []() {
instance.reset(new DatabaseConnection());
std::cout << "Database initialized\n";
});
return *instance;
}

void query(const std::string& sql) {
std::cout << "Executing: " << sql << "\n";
}

// Запрещаем копирование и перемещение
DatabaseConnection(const DatabaseConnection&) = delete;
DatabaseConnection& operator=(const DatabaseConnection&) = delete;

private:
DatabaseConnection() {
// Тяжелая инициализация: подключение к БД,
// загрузка конфигурации и т.д.
}

static std::once_flag initFlag; // Флаг для call_once
static std::unique_ptr<DatabaseConnection> instance;
};

// Определение статических членов
std::once_flag DatabaseConnection::initFlag;
std::unique_ptr<DatabaseConnection> DatabaseConnection::instance;



‼️ Ключевые особенности:

Потокобезопасность из коробки — не нужен ручной mutex, std::call_once сам блокирует конкурентные вызовы
Без накладных расходов после первого вызова — последующие вызовы проверяют только атомарный флаг
Исключения не ломают логику — если инициализация бросила exception, флаг не устанавливается и следующий поток попробует снова
Работает с любыми callable — лямбды, функции, функторы, std::bind


Используете std::call_once в продакшене? Какие кейсы у вас?

Библиотека C/C++ разработчика

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😁1
💻 Хочешь MacBook Pro? Просто начни учиться!

Да-да, вы не ослышались: Proglib.academy дарит макбук за учёбу!

Всё просто:

— купи любой курс Академии до 15 ноября;
— пройди 2 недели обучения (можно за два дня);
— напиши куратору в чате курса хэштег #розыгрыш.

📚 Выбирай свой курс:

▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными;
▫️ «Основы Python» — чтобы начать писать код с нуля;
▫️ «Алгоритмы и структуры данных» — для будущих инженеров;
▫️ «AI-агенты» или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ.

👉 Участвовать в розыгрыше
😁5
⚙️ Новый релиз OpenMW 0.50.0: улучшенная поддержка геймпадов и интерфейс

Разработчики игрового движка OpenMW, реимплементированного движка для Morrowind с открытым исходным кодом, выпустили долгожданную версию 0.50.0. Это масштабное обновление, ориентированное на повышение удобства игры на современных платформах, включая портативные устройства вроде Steam Deck. Особое внимание уделено улучшенной поддержке геймпадов и новому интерфейсу, специально адаптированному под управление контроллерами.

Основные изменения:

• Значительное улучшение навигации с геймпадом
• Исправления интерфейса и механики игры
• Оптимизация для портативных устройств и современных разрешений
• Продолжение работы над совместимостью и стабильностью

Это обновление открывает новые возможности для тех, кто любит играть в Morrowind на современном оборудовании, делая процесс более комфортным и интуитивным.

👉 Gitlab
👉 Заметки по релизу

Библиотека C/C++ разработчика

#буст
1😁1