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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
Download Telegram
🏖️ Подборка вакансий для 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++ разработчика
🍙 How-to: Как избежать memory ordering проблем в многопоточном коде


💭 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