Захват нескольких мьютексов вручную рискует deadlock при неправильном порядке.
std::scoped_lock
атомарно захватывает несколько мьютексов, избегая взаимоблокировок.std::lock_guard lock1(mtx1);
std::lock_guard lock2(mtx2); // deadlock риск!
std::scoped_lock lock(mtx1, mtx2); // безопасно
Библиотека C/C++ разработчика
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤1
🧐 Хочешь в Data Science, но не знаешь, с чего начать?
Пройди короткий тест по математике — бот покажет, насколько ты готов к переходу и что стоит подтянуть.
👉 Пройти тест
Пройди короткий тест по математике — бот покажет, насколько ты готов к переходу и что стоит подтянуть.
Всего пару минут — и ты поймёшь, куда двигаться дальше.
👉 Пройти тест
😁1
Запуск нового C++ проекта часто начинается с рутины: создание классов с конструкторами, деструкторами, операторами копирования/перемещения, шаблоны паттернов... Звучит очень знакомо и ужасно скучно. Что хотябы немного облегчить себе задачу можно воспользоваться AI.
Хотя AI и не знает бизнес-логику проекта, но зато он отлично справляется с созданием базовой структуры проекта.
Промпт:
Создай boilerplate код для C++ класса ResourceManager,
который управляет игровыми ресурсами (текстуры, звуки).
Класс должен быть синглтоном,
шаблонными методами загрузки/получения ресурсов и
thread-safe доступом.
Результат:
#pragma once
#include <memory>
#include <unordered_map>
#include <mutex>
#include <string>
template<typename T>
class ResourceManager {
private:
std::unordered_map<std::string, std::shared_ptr<T>> resources;
mutable std::mutex mutex;
// Приватный конструктор для синглтона
ResourceManager() = default;
public:
// Удаляем конструктор копирования и оператор присваивания
ResourceManager(const ResourceManager&) = delete;
ResourceManager& operator=(const ResourceManager&) = delete;
// Конструктор и оператор перемещения
ResourceManager(ResourceManager&&) noexcept = default;
ResourceManager& operator=(ResourceManager&&) noexcept = default;
// Деструктор
~ResourceManager() = default;
// Получение единственного экземпляра (Meyer's Singleton)
static ResourceManager& getInstance() {
static ResourceManager instance;
return instance;
}
// Загрузка ресурса
template<typename... Args>
bool load(const std::string& id, Args&&... args) {
std::lock_guard<std::mutex> lock(mutex);
if (resources.find(id) != resources.end()) {
return false; // Уже загружен
}
auto resource = std::make_shared<T>(std::forward<Args>(args)...);
resources[id] = resource;
return true;
}
// Получение ресурса
std::shared_ptr<T> get(const std::string& id) const {
std::lock_guard<std::mutex> lock(mutex);
auto it = resources.find(id);
return (it != resources.end()) ? it->second : nullptr;
}
// Выгрузка ресурса
bool unload(const std::string& id) {
std::lock_guard<std::mutex> lock(mutex);
return resources.erase(id) > 0;
}
// Очистка всех ресурсов
void clear() {
std::lock_guard<std::mutex> lock(mutex);
resources.clear();
}
};
• Полностью рабочий шаблонный класс
• Thread-safe операции
Теперь можешь сразу добавлять свою бизнес-логику, вместо того чтобы тратить время на шаблонный код
Библиотека C/C++ разработчика
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱8👍4❤1
🎲 Мы не только учим, но и играем!
На экспресс-курсе «Математика для Data Science» — викторина с призом TG-Premium 🎁
Проверь знания, прокачай математику и забери приз.
‼️ Оплатишь до 19 октября — получишь базовый курс в подарок.
👉 Записаться на курс
На экспресс-курсе «Математика для Data Science» — викторина с призом TG-Premium 🎁
Проверь знания, прокачай математику и забери приз.
‼️ Оплатишь до 19 октября — получишь базовый курс в подарок.
👉 Записаться на курс
😁1
🚫 14 вопросов, после которых вам не перезвонят
Вы прошли технический скрининг, решили все алгоритмические задачки, показали крутое портфолио — а оффера нет. Возможно, дело в том, что вы спросили. Один неудачный вопрос может перечеркнуть все ваши
👉 Читать дальше...
Библиотека C/C++ разработчика
#буст
Вы прошли технический скрининг, решили все алгоритмические задачки, показали крутое портфолио — а оффера нет. Возможно, дело в том, что вы спросили. Один неудачный вопрос может перечеркнуть все ваши
hard skills
, особенно когда soft skills
стали важнее кода. Разбираем фразы-убийцы карьеры.👉 Читать дальше...
Библиотека C/C++ разработчика
#буст
😁2🤔1
Недавно мы анонсировали старт нового курса «Математика для Data Science».
В ближайшие дни выйдет серия постов о том, что ждёт вас на курсе, а пока познакомим вас с его экспертами.
Спикеры курса:
👤 Ксения Кондаурова
Преподаватель и автор курсов для бакалавриата Центрального Университета (Т-Банк), спикер и методист для Edutoria (Сбербанк). Ксения расскажет, как линейная алгебра применяется для построения предсказательных моделей, и научит проверять гипотезы для бизнеса с помощью статистики.
👤 Диана Миронидис
Преподаватель НИУ ВШЭ, автор и методист Яндекс Практикума. Самый экстравагантный преподаватель из всех, с кем вы учились, — убедитесь, что математика может быть нескучной. Диана погрузит в математический анализ, научит исследовать функции и находить параметры, при которых ошибка модели минимальна.
👤 Маргарита Бурова
Академический руководитель образовательных программ по аналитике и анализу данных, Wildberries & Russ. Проведёт квиз с розыгрышем годовой подписки TG Premium. Маргарита — эксперт в дата-сайенс, ИИ и математических методах анализа данных, фанат развития ИТ-образования.
Вместе с экспертами за 8 недель вы не просто получите знания, а познакомитесь с математикой заново.
🎁 Только при оплате до 19 октября курс «Базовая математика» в подарок!
👉 Записаться на курс
В ближайшие дни выйдет серия постов о том, что ждёт вас на курсе, а пока познакомим вас с его экспертами.
Спикеры курса:
👤 Ксения Кондаурова
Преподаватель и автор курсов для бакалавриата Центрального Университета (Т-Банк), спикер и методист для Edutoria (Сбербанк). Ксения расскажет, как линейная алгебра применяется для построения предсказательных моделей, и научит проверять гипотезы для бизнеса с помощью статистики.
👤 Диана Миронидис
Преподаватель НИУ ВШЭ, автор и методист Яндекс Практикума. Самый экстравагантный преподаватель из всех, с кем вы учились, — убедитесь, что математика может быть нескучной. Диана погрузит в математический анализ, научит исследовать функции и находить параметры, при которых ошибка модели минимальна.
👤 Маргарита Бурова
Академический руководитель образовательных программ по аналитике и анализу данных, Wildberries & Russ. Проведёт квиз с розыгрышем годовой подписки TG Premium. Маргарита — эксперт в дата-сайенс, ИИ и математических методах анализа данных, фанат развития ИТ-образования.
Вместе с экспертами за 8 недель вы не просто получите знания, а познакомитесь с математикой заново.
🎁 Только при оплате до 19 октября курс «Базовая математика» в подарок!
👉 Записаться на курс
❤1😁1
Forwarded from Библиотека задач по C++ | тесты, код, задания
Forwarded from Библиотека задач по C++ | тесты, код, задания
Каковы типы x и y (С++23)?
Anonymous Quiz
18%
unsigned int и int
22%
size_t и ptrdiff_t
15%
unsigned long и long
25%
Ошибка компиляции
20%
unsigned long long и long long
😁6
♾️ 17 формул, которые изменили мир
Математика в действии — как уравнения, придуманные века назад, сегодня управляют интернетом, медициной, космосом и вашими финансами.
📎 Читать статью
А если после статьи захотите разобраться, как эта математика работает в Data Science — вот экспресс-курс, который всё расставит по полочкам:
«Математика для Data Science»
🎓 За 2 месяца поймёте, как работают алгоритмы ML под капотом.
🗓️ Старт — 6 ноября
👉 Записаться на курс
Математика в действии — как уравнения, придуманные века назад, сегодня управляют интернетом, медициной, космосом и вашими финансами.
📎 Читать статью
А если после статьи захотите разобраться, как эта математика работает в Data Science — вот экспресс-курс, который всё расставит по полочкам:
«Математика для Data Science»
— практика и живые уроки
— разбор кода и проверка домашних
— поддержка в Telegram-чате
🎓 За 2 месяца поймёте, как работают алгоритмы ML под капотом.
🗓️ Старт — 6 ноября
👉 Записаться на курс
😁1
Forwarded from Библиотека собеса по C++ | вопросы с собеседований
Сколько потоков РЕАЛЬНО нужно создавать для CPU-bound задачи?
Anonymous Poll
23%
std::thread::hardware_concurrency()
15%
std::thread::hardware_concurrency() * 2
22%
std::thread::hardware_concurrency() - 1
39%
Один поток на каждое ядро, но с учётом hyper-threading
2%
Напишу свой вариант в комментариях
😁1
📰 Свеженькое из мира C++
Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.
😎 Полезное:
• Передача сообщений через condition_variable — способ общения между потоками
• std::scoped_lock — способ захватить несколько потоков избегая deadlock
• Генерация шаблонного кода — паттерн для генерации boilerplate кода
• 14 вопросов, после которых вам не перезвонят — статья о том как не завалить собеседование
🔥 Интересные проекты:
• Envoy — прокси-сервер, предназначенный для облачных приложений и микросервисной архитектуры
• ESPHome — открытая система для управления микроконтроллерами (ESP8266, ESP32 и др.)
• Shotcut — бесплатный кроссплатформенный видеоредактор с открытым исходным кодом
• uWebSockets — простой, безопасный и соответствующий стандартам web-сервер для самых требовательных приложений
Библиотека C/C++ разработчика
#свежак
Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.
😎 Полезное:
• Передача сообщений через condition_variable — способ общения между потоками
• std::scoped_lock — способ захватить несколько потоков избегая deadlock
• Генерация шаблонного кода — паттерн для генерации boilerplate кода
• 14 вопросов, после которых вам не перезвонят — статья о том как не завалить собеседование
🔥 Интересные проекты:
• Envoy — прокси-сервер, предназначенный для облачных приложений и микросервисной архитектуры
• ESPHome — открытая система для управления микроконтроллерами (ESP8266, ESP32 и др.)
• Shotcut — бесплатный кроссплатформенный видеоредактор с открытым исходным кодом
• uWebSockets — простой, безопасный и соответствующий стандартам web-сервер для самых требовательных приложений
Библиотека C/C++ разработчика
#свежак
👍3
⏰ Сегодня последний день!
🎁 Только при оплате до 19 октября — курс «Базовая математика» в подарок!
Успей попасть на экспресс-курс «Математика для Data Science» — 10 живых вебинаров, практика на Python, поддержка менторов и преподаватели из ВШЭ, Яндекс Практикума и Wildberries.
За 2 месяца разберёшься с тем, на чём держится Data Science:
🎓 Построишь математический фундамент и поймёшь, как работают алгоритмы ML под капотом.
👉 Записаться на курс
Старт — 6 ноября, не упусти бонус!🎁
🎁 Только при оплате до 19 октября — курс «Базовая математика» в подарок!
Успей попасть на экспресс-курс «Математика для Data Science» — 10 живых вебинаров, практика на Python, поддержка менторов и преподаватели из ВШЭ, Яндекс Практикума и Wildberries.
За 2 месяца разберёшься с тем, на чём держится Data Science:
• векторы, матрицы и регрессия;
• градиенты, оптимизация, вероятности и статистика;
• реальные задачи анализа данных;
🎓 Построишь математический фундамент и поймёшь, как работают алгоритмы ML под капотом.
👉 Записаться на курс
Старт — 6 ноября, не упусти бонус!🎁
😁1
Forwarded from Библиотека задач по C++ | тесты, код, задания
Forwarded from Библиотека задач по C++ | тесты, код, задания
Что не так?
Anonymous Quiz
21%
Всё правильно
19%
data недоступен в catch блоке конструктора
12%
Утечка памяти
33%
Синтаксическая ошибка
14%
data не инициализирован в catch
🔥2❤1😁1
🐸 Подборка вакансий для C++-разработчиков за неделю
C++ разработчик (Поиск) — от 250 000 и до 400 000 ₽ Офис (Москва)
C++/Qt/QML разработчик под Android в команду Транспорта — Удалёнка
Middle Разработчик на C/C++ под Linux — от 250 000 и до 300 000 ₽ Удалёнка
C++ developer — от 300 000 ₽ Удалёнка
Библиотека C/C++ разработчика
C++ разработчик (Поиск) — от 250 000 и до 400 000 ₽ Офис (Москва)
C++/Qt/QML разработчик под Android в команду Транспорта — Удалёнка
Middle Разработчик на C/C++ под Linux — от 250 000 и до 300 000 ₽ Удалёнка
C++ developer — от 300 000 ₽ Удалёнка
Библиотека C/C++ разработчика
👍1
- Как написать собственную кинематику для робота-манипулятора
Команда ZeBrains написала с нуля два алгоритма обратной кинематики для робота xArm 2.0, который должен был ловить объекты на конвейере.
❗ Что внутри:
• полные математические выкладки с геометрическими схемами
• готовый код на C++ с интеграцией в ROS2
•два варианта кинематики под разные задачи движения
Авторы не просто показывают формулы — они объясняют весь путь: от анализа проблемы через теорему косинусов до тестирования в
Критично полезно, если вы работаете с нестандартными конфигурациями роботов, где библиотеки дают сбой.
👉 Статья
Библиотека C/C++ разработчика
#буст
Команда ZeBrains написала с нуля два алгоритма обратной кинематики для робота xArm 2.0, который должен был ловить объекты на конвейере.
❗ Что внутри:
• полные математические выкладки с геометрическими схемами
• готовый код на C++ с интеграцией в ROS2
•два варианта кинематики под разные задачи движения
Авторы не просто показывают формулы — они объясняют весь путь: от анализа проблемы через теорему косинусов до тестирования в
Unreal Engine
и работы на реальном стенде.Критично полезно, если вы работаете с нестандартными конфигурациями роботов, где библиотеки дают сбой.
👉 Статья
Библиотека C/C++ разработчика
#буст
❤3👍1
🔥 Когда понимаешь SOLID — жизнь становится проще
В октябре действует скидка 40% на все курсы от Proglib Academy, включая интенсив «Архитектуры и шаблоны проектирования»
📘 На интенсиве ты:
— разберёшься, как проектировать приложения, которые не ломаются при каждом изменении;
— освоишь SOLID-принципы, IoC, адаптеры и фабрики;
— научишься строить масштабируемые архитектуры;
— создашь собственную игру «Звёздные войны».
👨💻 Примеры кода на C#, Java, Python, PHP, C++ и JavaScript. Главное — понимать принципы, а не язык.
Преподаватель — Евгений Тюменцев, директор компании HWdTech, разрабатывал многопоточные кроссплатформенные приложения для IBM Watson.
📆 Формат: онлайн, 1 месяц.
📚 9 лекций + 2 бонусных занятия + практика.
Интенсив подойдёт джунам, которые хотят апнуться до мидла, и мидлам, мечтающим о роли архитектора.
👉 Переходи к курсам со скидкой 40%
В октябре действует скидка 40% на все курсы от Proglib Academy, включая интенсив «Архитектуры и шаблоны проектирования»
📘 На интенсиве ты:
— разберёшься, как проектировать приложения, которые не ломаются при каждом изменении;
— освоишь SOLID-принципы, IoC, адаптеры и фабрики;
— научишься строить масштабируемые архитектуры;
— создашь собственную игру «Звёздные войны».
👨💻 Примеры кода на C#, Java, Python, PHP, C++ и JavaScript. Главное — понимать принципы, а не язык.
Преподаватель — Евгений Тюменцев, директор компании HWdTech, разрабатывал многопоточные кроссплатформенные приложения для IBM Watson.
📆 Формат: онлайн, 1 месяц.
📚 9 лекций + 2 бонусных занятия + практика.
Интенсив подойдёт джунам, которые хотят апнуться до мидла, и мидлам, мечтающим о роли архитектора.
👉 Переходи к курсам со скидкой 40%
😁2
🎫 std::latch — одноразовый счетчик
🩹 Проблема:
Главный поток должен дождаться завершения инициализации в нескольких рабочих потоках перед началом основной работы. Барьер не подходит, так как нужна одноразовая синхронизация, а не переиспользуемая.
💡 Решение:
✏️ Пример кода:
‼️ Преимущества:
• Простая одноразовая синхронизация множества потоков
• Эффективное ожидание без активных проверок
• Идеален для сценариев типа ждать «готовности всех»
• Минимальные накладные расходы по сравнению с
Библиотека C/C++ разработчика
#буст
Главный поток должен дождаться завершения инициализации в нескольких рабочих потоках перед началом основной работы. Барьер не подходит, так как нужна одноразовая синхронизация, а не переиспользуемая.
std::latch (C++20)
— это одноразовый счетчик обратного отсчета. Потоки уменьшают счетчик, а другие ждут, пока он достигнет нуля. После срабатывания latch нельзя переиспользовать.#include <iostream>
#include <thread>
#include <latch>
#include <vector>
void worker_init(int id, std::latch& ready_signal) {
// Имитация инициализации ресурсов
std::cout << "Поток " << id << " инициализируется...\n";
std::this_thread::sleep_for(std::chrono::milliseconds(100 * id));
std::cout << "Поток " << id << " готов\n";
ready_signal.count_down(); // Уменьшаем счетчик
}
void worker_process(int id, std::latch& start_signal) {
std::cout << "Поток " << id << " ждет сигнал старта...\n";
start_signal.wait(); // Ждем пока счетчик станет 0
std::cout << "Поток " << id << " начал обработку\n";
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
int main() {
const int num_workers = 4;
std::latch all_ready(num_workers); // Счетчик для готовности
std::latch start_work(1); // Сигнал для старта
std::vector<std::thread> threads;
// Создаем рабочие потоки
for (int i = 0; i < num_workers; ++i) {
threads.emplace_back([i, &all_ready, &start_work]() {
worker_init(i, all_ready);
worker_process(i, start_work);
});
}
// Главный поток ждет готовности всех
std::cout << "Главный поток ждет инициализации...\n";
all_ready.wait();
std::cout << "Все потоки готовы. Даем сигнал старта!\n";
start_work.count_down(); // Даем сигнал старта
for (auto& t : threads) {
t.join();
}
return 0;
}
• Простая одноразовая синхронизация множества потоков
• Эффективное ожидание без активных проверок
• Идеален для сценариев типа ждать «готовности всех»
• Минимальные накладные расходы по сравнению с
condition_variable
Библиотека C/C++ разработчика
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍6🔥4