🧨 Что такое семафор?
Семафор (semaphore) — примитив синхронизации, основанный на счётчике, который поддерживает атомарные операции: инкремент и декремент, при этом операция уменьшения для нулевого значения счётчика является блокирующей
Семафор представляет собой счетчик, который увеличивается или уменьшается потоками. Если счетчик равен нулю, потоки, пытающиеся уменьшить его значение, блокируются до тех пор, пока счетчик не станет больше нуля
В основном служат для построения более сложных механизмов синхронизации
Семафор (semaphore) — примитив синхронизации, основанный на счётчике, который поддерживает атомарные операции: инкремент и декремент, при этом операция уменьшения для нулевого значения счётчика является блокирующей
Семафор представляет собой счетчик, который увеличивается или уменьшается потоками. Если счетчик равен нулю, потоки, пытающиеся уменьшить его значение, блокируются до тех пор, пока счетчик не станет больше нуля
В основном служат для построения более сложных механизмов синхронизации
🧨 Что такое type_traits?
type_traits — это библиотека, которая предоставляет удобные средства для работы с типами во время компиляции. Она позволяет нам проверять и извлекать свойства типов, такие как const-квалификаторы, ссылочность, и многое другое
Документация
• cppreference
• microsoft
type_traits — это библиотека, которая предоставляет удобные средства для работы с типами во время компиляции. Она позволяет нам проверять и извлекать свойства типов, такие как const-квалификаторы, ссылочность, и многое другое
Документация
• cppreference
• microsoft
🔮 Что такое std::unique_lock?
❗std::unique_lock — это класс из стандартной библиотеки, который предоставляет механизм блокировки мьютекса (mutex) для обеспечения безопасности при доступе к общим данным из нескольких потоков
❗У std::unique_lock есть альтернатива — это std::lock_guard. Их главное отличие в том, что std::unique_lock можно заблокировать и разблокировать, а std::lock_guard разблокируется только при уничтожении
❗std::unique_lock — это класс из стандартной библиотеки, который предоставляет механизм блокировки мьютекса (mutex) для обеспечения безопасности при доступе к общим данным из нескольких потоков
❗У std::unique_lock есть альтернатива — это std::lock_guard. Их главное отличие в том, что std::unique_lock можно заблокировать и разблокировать, а std::lock_guard разблокируется только при уничтожении
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
😏 Зачем нужен виртуальный деструктор?
Виртуальные деструктор нужен только когда мы пользуемся наследованием. Он необходим в первую очередь, чтобы не было утечки памяти (memory leaks)
❗Если ключевое слово virtual к деструктору в предке, то и во всех потомках он тоже будет виртуальным
❗ Если есть хотя бы одна виртуальная функция в классе, то деструктор тоже нужно сделать виртуальным
Виртуальные деструктор нужен только когда мы пользуемся наследованием. Он необходим в первую очередь, чтобы не было утечки памяти (memory leaks)
❗Если ключевое слово virtual к деструктору в предке, то и во всех потомках он тоже будет виртуальным
❗ Если есть хотя бы одна виртуальная функция в классе, то деструктор тоже нужно сделать виртуальным
🔮 Статья об constexpr, consteval и constinit
Вышла небольшая обзорная статья о том, как constexpr, consteval, и constinit позволяют реализовывать компиляцию на этапе выполнения. Компиляция на этапе выполнения позволяет ускорить выполнение кода за счет выполнения расчетов на этапе компиляции, а не в рантайме
👉 Ссылка
Вышла небольшая обзорная статья о том, как constexpr, consteval, и constinit позволяют реализовывать компиляцию на этапе выполнения. Компиляция на этапе выполнения позволяет ускорить выполнение кода за счет выполнения расчетов на этапе компиляции, а не в рантайме
👉 Ссылка
-35% на полугодовой курс по алгоритмам!
🌟 Алгоритмы и структуры данных🌟
23 390 рублей35 990 рублей до 1 апреля
Курс для тех, кто хочет научиться работать с алгоритмами, подготовиться к собеседованию крупную IT-компанию и начать брать более сложные проекты.
🔥 Переходите и активируйте вводные занятия курса — https://proglib.io/w/5a72cc41
Вас ждут:
– 150 практических заданий и 47 видеолекций
– бессрочный доступ к обучению
– поддержка преподавателя в чате
А также очень харизматичный спикер из Яндекса 🙌🏻
🌟 Алгоритмы и структуры данных🌟
23 390 рублей
Курс для тех, кто хочет научиться работать с алгоритмами, подготовиться к собеседованию крупную IT-компанию и начать брать более сложные проекты.
🔥 Переходите и активируйте вводные занятия курса — https://proglib.io/w/5a72cc41
Вас ждут:
– 150 практических заданий и 47 видеолекций
– бессрочный доступ к обучению
– поддержка преподавателя в чате
А также очень харизматичный спикер из Яндекса 🙌🏻
💡 В чем различия между delete и delete[]?
❗ delete уничтожает объекты, которые были созданы при помощи new()
❗ delete[] уничтожает объекты, которые были созданы при помощи new[](). Также будут вызваны деструкторы для всех элементов
‼️ Если операторы использовать не правильно, то будет undefined behavior😜
❗ delete уничтожает объекты, которые были созданы при помощи new()
❗ delete[] уничтожает объекты, которые были созданы при помощи new[](). Также будут вызваны деструкторы для всех элементов
‼️ Если операторы использовать не правильно, то будет undefined behavior😜
Что произойдет, если следующая программа будет выполнена на C и C++?
Anonymous Quiz
8%
Ошибка для C и успешное выполнение для C++
17%
Ошибка как в C, так и в C++
47%
Ошибка в C++ и успешное выполнение в C
27%
Успешный запуск как на C, так и на C++.
⚡️Proglib запускает каналы про нейросети
По каждому направлению отдельно! А именно:
⭐Библиотека нейрозвука — здесь все, связанное с транскрибацией, синтезом речи, ИИ-музыкой
⭐Библиотека нейротекста — классические ИИ-помощники вроде ChatGPT, Gemini, Bing
⭐Библиотека нейровидео — здесь пишем про нашумевшую Sora AI, а также про Runway ML, дипфейки и другие видеотехнологии
⭐Библиотека нейрокартинок — генерируем изображения и рассказываем про Midjourney, DALL-E, Stable Diffusion
⭐️Библиотека робототехники и беспилотников — наконец, тут мы рассказываем не столько про ИИ, сколько про роботов, беспилотные технологии и интернет вещей
И все это — максимально подробно: с пошаговыми инструкциями, промтами, инструментами и лайфхаками.
Подписывайтесь!
По каждому направлению отдельно! А именно:
⭐Библиотека нейрозвука — здесь все, связанное с транскрибацией, синтезом речи, ИИ-музыкой
⭐Библиотека нейротекста — классические ИИ-помощники вроде ChatGPT, Gemini, Bing
⭐Библиотека нейровидео — здесь пишем про нашумевшую Sora AI, а также про Runway ML, дипфейки и другие видеотехнологии
⭐Библиотека нейрокартинок — генерируем изображения и рассказываем про Midjourney, DALL-E, Stable Diffusion
⭐️Библиотека робототехники и беспилотников — наконец, тут мы рассказываем не столько про ИИ, сколько про роботов, беспилотные технологии и интернет вещей
И все это — максимально подробно: с пошаговыми инструкциями, промтами, инструментами и лайфхаками.
Подписывайтесь!
🧨 Spinlock
Spinlock (спин-блокировка, циклическая-блокировка) — по своей сути просто бесконечный цикл с проверкой для выхода. Необходим для синхронизации доступа к общему ресурсу в многопоточных приложениях
❗Spinlock даёт максимальную нагрузку на CPU. Так как по задумке он выполняется очень ограниченное время, то это не заметно
❗ Значительно дешевле mutex
Spinlock (спин-блокировка, циклическая-блокировка) — по своей сути просто бесконечный цикл с проверкой для выхода. Необходим для синхронизации доступа к общему ресурсу в многопоточных приложениях
❗Spinlock даёт максимальную нагрузку на CPU. Так как по задумке он выполняется очень ограниченное время, то это не заметно
❗ Значительно дешевле mutex
Какой из следующих типов поддерживается C++, но не C?
Anonymous Quiz
25%
double
12%
float
1%
int
62%
bool
💡 Можно ли вызвать delete this?
❗Ответ
Да, можно. В основном это делается, если деструктор приватный и другого способа уничтожить объект нет. В остальных же случаях, при двойном вызове delete на одном и том же указателе будет undefined behavior
❗Ответ
🧨 Принципы SOLID
Принципы SOLID — в отличие от шаблонов проектирование GoF это правила, которым удобно следовать при разработке для улучшения структуры кода, облегчения возможности поддержки и развития нового функционала
💡В SOLID входит пять принципов, по одному на каждую букву
- Single Responsibility Principle (Принцип единственной обязанности)
- Open/Closed Principle (Принцип открытости/закрытости)
- Liskov Substitution Principle (Принцип подстановки Лисков)
- Interface Segregation Principle (Принцип разделения интерфейсов)
- Dependency Inversion Principle (Принцип инверсии зависимостей)
#solid
Принципы SOLID — в отличие от шаблонов проектирование GoF это правила, которым удобно следовать при разработке для улучшения структуры кода, облегчения возможности поддержки и развития нового функционала
💡В SOLID входит пять принципов, по одному на каждую букву
- Single Responsibility Principle (Принцип единственной обязанности)
- Open/Closed Principle (Принцип открытости/закрытости)
- Liskov Substitution Principle (Принцип подстановки Лисков)
- Interface Segregation Principle (Принцип разделения интерфейсов)
- Dependency Inversion Principle (Принцип инверсии зависимостей)
#solid
🧨 Принцип единственной обязанности
Принцип единственной обязанности (Single Responsibility Principle) — первый из SOLID принципов
💡 Формулировка
- У вас должна быть только одна причина, чтобы поменять класс
- Основной причиной для изменения класса это появление новых требований. Это ведёт к изменению ответственности
- Следуя этому принципу класс не должен иметь больше одной ответственности. Это уменьшит вероятность нарушения логики приложения
❗Главной идеей данного принципа — это то, что если мы что-то поменяли в одном месте, то мы не хотим чтобы что-то сломалось в другом месте
Принцип единственной обязанности (Single Responsibility Principle) — первый из SOLID принципов
💡 Формулировка
- У вас должна быть только одна причина, чтобы поменять класс
- Основной причиной для изменения класса это появление новых требований. Это ведёт к изменению ответственности
- Следуя этому принципу класс не должен иметь больше одной ответственности. Это уменьшит вероятность нарушения логики приложения
❗Главной идеей данного принципа — это то, что если мы что-то поменяли в одном месте, то мы не хотим чтобы что-то сломалось в другом месте
🧨Что такое align(...)?
align(...) — расширение языка, которая задает выравнивание структуры и её элементов
❗ Число в align задаёт выравнивание в байтах и может принимать значения от 1 до 8192
‼️ Начиная с C++11 появилось ключевое слово alignas, работает также, но в отличие от align входит в стандарт языка
align(...) — расширение языка, которая задает выравнивание структуры и её элементов
❗ Число в align задаёт выравнивание в байтах и может принимать значения от 1 до 8192
‼️ Начиная с C++11 появилось ключевое слово alignas, работает также, но в отличие от align входит в стандарт языка