Forwarded from Библиотека задач по C++ | тесты, код, задания
Forwarded from Библиотека задач по C++ | тесты, код, задания
Что выведет программа?
Anonymous Poll
55%
Custom delete
22%
Ничего не выведет
15%
Компиляционная ошибка
6%
Undefined behavior
3%
Зависит от компилятора
🏖️ Подборка вакансий для C++-разработчиков за неделю
Разработчик C++ — от 250 000 и до 400 000 ₽ Удалёнка
Team Lead C++ (Social Core) — от 300 000 ₽ Удалёнка
Senior C++ Developer — от 380 000 и до 430 000 ₽ Удалёнка
Senior Embedded-разработчик / программист микроконтроллеров — от 300 000 ₽ Офис (Москва)
C++-разработчик (Новости) — от 270 000 и до 370 000 ₽ Удалёнка
Библиотека C/C++ разработчика
Разработчик C++ — от 250 000 и до 400 000 ₽ Удалёнка
Team Lead C++ (Social Core) — от 300 000 ₽ Удалёнка
Senior C++ Developer — от 380 000 и до 430 000 ₽ Удалёнка
Senior Embedded-разработчик / программист микроконтроллеров — от 300 000 ₽ Офис (Москва)
C++-разработчик (Новости) — от 270 000 и до 370 000 ₽ Удалёнка
Библиотека C/C++ разработчика
💭 Race conditions в атомарных операциях - одна из самых коварных проблем. Разбираемся с memory ordering.
Проблема: Неопределенное поведение при concurrent доступе
// ❌ ОПАСНО: data race!
std::atomic<bool> ready{false};
int data = 0;
// Thread 1
data = 42;
ready.store(true); // неопределенный ordering!
// Thread 2
if (ready.load()) {
process(data); // может быть 0 или 42!
}
Решение: Explicit memory ordering
// ✅ ПРАВИЛЬНО: используем memory_order
std::atomic<bool> ready{false};
int data = 0;
// Thread 1
data = 42;
ready.store(true, std::memory_order_release); // освобождаем
// Thread 2
if (ready.load(std::memory_order_acquire)) { // захватываем
process(data); // гарантированно 42!
}
⚠️ Частые ошибки:
• Использование memory_order_relaxed везде
• Забывание про acquire-release семантику
• Смешивание атомарных и неатомарных операций
Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔3👍1