msg_ptr (message pointer)
msg_ptr это указатель на структуру или класс, который содержит данные сообщения. Обычно это просто указатель void*.
Он используется в многопоточном программировании для передачи сообщений между потоками.
Использование указателей вместо копирования данных позволяет избежать лишних копий и ускорить передачу сообщений между потоками.
Если запустить код из примера, можно увидеть, что данные успешно передаются между потоками через очередь с использованием указателей на сообщения.
#код
msg_ptr это указатель на структуру или класс, который содержит данные сообщения. Обычно это просто указатель void*.
Он используется в многопоточном программировании для передачи сообщений между потоками.
Использование указателей вместо копирования данных позволяет избежать лишних копий и ускорить передачу сообщений между потоками.
Если запустить код из примера, можно увидеть, что данные успешно передаются между потоками через очередь с использованием указателей на сообщения.
#код
Вы используете механическую клавиатуру для печати или мембранную?
#интерактив
#интерактив
Принцип lock-free
Принцип lock-free (без блокировок) в С++ относится к методам многопоточного программирования, которые позволяют избегать использования блокировок (locks) для обеспечения безопасности доступа к данным из нескольких потоков.
Основная идея lock-free программирования заключается в том, чтобы позволить нескольким потокам одновременно работать с общими данными без блокировки выполнения одного или нескольких потоков.
Однако стоит отметить, что написание lock-free кода может быть сложным и требовать более глубокого понимания атомарных операций и алгоритмов.
#код
Принцип lock-free (без блокировок) в С++ относится к методам многопоточного программирования, которые позволяют избегать использования блокировок (locks) для обеспечения безопасности доступа к данным из нескольких потоков.
Основная идея lock-free программирования заключается в том, чтобы позволить нескольким потокам одновременно работать с общими данными без блокировки выполнения одного или нескольких потоков.
Однако стоит отметить, что написание lock-free кода может быть сложным и требовать более глубокого понимания атомарных операций и алгоритмов.
#код
Очередной #дайджест по С++:
Тестирование модулей C++20 с помощью Clang и Make
Заголовочные файлы — это пережиток прошлого. Ни один современный язык программирования не имеет эквивалентной концепции.
Благими намерениями и модулями C++ вымощена дорога в ад
Моя битва против знакового/беззнакового сравнения: самые распространенные нарушения
Сравнение чисел с разными знаками может быть опасным в C++.
Андерс Цедрониус: помешанный на скорости, хороший, плохой и ужасный
Любопытный сорокаминутный доклад.
Иерархические колеса синхронизации — это умное решение для реализации задачи планировщика в константное время.
Тестирование модулей C++20 с помощью Clang и Make
Заголовочные файлы — это пережиток прошлого. Ни один современный язык программирования не имеет эквивалентной концепции.
Благими намерениями и модулями C++ вымощена дорога в ад
Моя битва против знакового/беззнакового сравнения: самые распространенные нарушения
Сравнение чисел с разными знаками может быть опасным в C++.
Андерс Цедрониус: помешанный на скорости, хороший, плохой и ужасный
Любопытный сорокаминутный доклад.
Иерархические колеса синхронизации — это умное решение для реализации задачи планировщика в константное время.
Обмен значений двух переменных с помощью XOR
Этот метод является быстрым и не требует использования 3-й переменной.
#код
Этот метод является быстрым и не требует использования 3-й переменной.
#код
Релиз версии 5.8.1: реализация пожеланий пользователей и исправление недочетов
Пару дней назад мы зафиксировали версию 5.8.1 открытого проекта SObjectizer. В данной статье поговорим о новых возможностях, которые появились в SObjectizer благодаря пожеланиям пользователей, и упомянем исправление не выявленного ранее недочета. Кому интересно, милости прошу под кат.
Читать статью
Пару дней назад мы зафиксировали версию 5.8.1 открытого проекта SObjectizer. В данной статье поговорим о новых возможностях, которые появились в SObjectizer благодаря пожеланиям пользователей, и упомянем исправление не выявленного ранее недочета. Кому интересно, милости прошу под кат.
Читать статью
Перезагрузка оператора индексации
В C++, перезагрузка оператора индексации (operator[]) позволяет вам создавать собственные классы с доступом к элементам, подобным массивам, используя квадратные скобки для доступа к элементам объекта. Вы можете перегрузить оператор operator[] для пользовательского класса, чтобы обеспечить индексированный доступ к его элементам.
#код
В C++, перезагрузка оператора индексации (operator[]) позволяет вам создавать собственные классы с доступом к элементам, подобным массивам, используя квадратные скобки для доступа к элементам объекта. Вы можете перегрузить оператор operator[] для пользовательского класса, чтобы обеспечить индексированный доступ к его элементам.
#код
Какая разница между calloc и malloc?
Основное различие между функциями calloc и malloc заключается в том, как они инициализируют выделенную память.
malloc просто выделяет указанный объем памяти и возвращает указатель на него. Содержимое выделенной памяти при этом не инициализируется.
calloc, помимо выделения памяти, также инициализирует всю выделенную память нулями. Таким образом после вызова calloc вся выделенная память будет заполнена нулевыми значениями.
Кроме того, в calloc размер выделяемой памяти задается в элементах, а не в байтах. Calloc умножает количество элементов на размер одного элемента, чтобы определить общий размер памяти для выделения.
#вопросы_с_собеседований
Основное различие между функциями calloc и malloc заключается в том, как они инициализируют выделенную память.
malloc просто выделяет указанный объем памяти и возвращает указатель на него. Содержимое выделенной памяти при этом не инициализируется.
calloc, помимо выделения памяти, также инициализирует всю выделенную память нулями. Таким образом после вызова calloc вся выделенная память будет заполнена нулевыми значениями.
Кроме того, в calloc размер выделяемой памяти задается в элементах, а не в байтах. Calloc умножает количество элементов на размер одного элемента, чтобы определить общий размер памяти для выделения.
#вопросы_с_собеседований
🐧📖 ТОП-10 книг по Linux в 2023 году
Популярные книги по изучению Linux на русском языке, опубликованные за последние несколько лет.
Читать статью
Популярные книги по изучению Linux на русском языке, опубликованные за последние несколько лет.
Читать статью
std::any_cast
std::any_cast используется для приведения объектов типа std::any к конкретному типу данных во время выполнения программы.
Класс std::any может хранить данные любого типа, но при этом теряется информация о реальном типе данных.
Чтобы получить эти данные обратно в изначальный тип, и используется std::any_cast. Он проверяет, совместим ли хранимый в std::any объект с запрошенным целевым типом.
Если совместим — возвращает ссылку на данные нужного типа.
Например, если в std::any был помещен объект типа int, то с помощью std::any_cast этот int можно получить обратно в переменную типа int. Аналогично для других типов данных.
#код
std::any_cast используется для приведения объектов типа std::any к конкретному типу данных во время выполнения программы.
Класс std::any может хранить данные любого типа, но при этом теряется информация о реальном типе данных.
Чтобы получить эти данные обратно в изначальный тип, и используется std::any_cast. Он проверяет, совместим ли хранимый в std::any объект с запрошенным целевым типом.
Если совместим — возвращает ссылку на данные нужного типа.
Например, если в std::any был помещен объект типа int, то с помощью std::any_cast этот int можно получить обратно в переменную типа int. Аналогично для других типов данных.
#код
std::reference_wrapper
std::reference_wrapper — это класс в C++, предоставляемый стандартной библиотекой, который оборачивает ссылку на объект. Этот класс полезен, когда вам нужно передать или хранить ссылку на объект, но вы хотите избежать неявного копирования объекта.
Основное назначение std::reference_wrapper заключается в том, чтобы позволить передавать ссылки как аргументы функций, которые обычно ожидают копии объектов. Это особенно полезно, например, при использовании алгоритмов из стандартной библиотеки, которые могут копировать элементы контейнера, если не явно указано иначе.
#код
std::reference_wrapper — это класс в C++, предоставляемый стандартной библиотекой, который оборачивает ссылку на объект. Этот класс полезен, когда вам нужно передать или хранить ссылку на объект, но вы хотите избежать неявного копирования объекта.
Основное назначение std::reference_wrapper заключается в том, чтобы позволить передавать ссылки как аргументы функций, которые обычно ожидают копии объектов. Это особенно полезно, например, при использовании алгоритмов из стандартной библиотеки, которые могут копировать элементы контейнера, если не явно указано иначе.
#код
Очередной #дайджест по С++:
✍️ Проклятые Земли. Изменяем движок игры! Подробности + ПРИМЕР реверсинга движка
Статья о том, как реверс-инжиниринг и разбор форматов могут не только расширить старую любимую игрушку, но и сделать из неё абсолютный шедевр, который будет смотреться уже в новом свете.
✍️ Психический симулятор или Triumvirate of Hearts
Автор решил поделиться своей игрой и своими исследованиями в области психологии.
✍️ Как устроен PassMark. Воспроизводим тесты из машинного кода
Что находится под капотом у легендарной программы для бенчмаркинга? Автор предлагает изучить ее алгоритмы тестирования и воспроизвести их самостоятельно на других языках программирования, чтобы иметь независимую возможность получения оценки производительности.
✍️ Принцип проектирования API: чтение свойства или добавление обработчика событий не должно изменять наблюдаемое поведение
Статья из блога Майкрософт.
✍️ Проклятые Земли. Изменяем движок игры! Подробности + ПРИМЕР реверсинга движка
Статья о том, как реверс-инжиниринг и разбор форматов могут не только расширить старую любимую игрушку, но и сделать из неё абсолютный шедевр, который будет смотреться уже в новом свете.
✍️ Психический симулятор или Triumvirate of Hearts
Автор решил поделиться своей игрой и своими исследованиями в области психологии.
✍️ Как устроен PassMark. Воспроизводим тесты из машинного кода
Что находится под капотом у легендарной программы для бенчмаркинга? Автор предлагает изучить ее алгоритмы тестирования и воспроизвести их самостоятельно на других языках программирования, чтобы иметь независимую возможность получения оценки производительности.
✍️ Принцип проектирования API: чтение свойства или добавление обработчика событий не должно изменять наблюдаемое поведение
Статья из блога Майкрософт.