Багатопрочитане програмування в C і C++ дозволяє одночасно виконувати декілька завдань, покращуючи продуктивність і чуйність. Однак, проектування ефективних багатопрочитаних систем вимагає дотримання конкретних принципів, щоб уникнути таких питань, як умови раси, блокування, і невідповідності даних. Ця стаття визначає основні принципи дизайну, що підтримуються реальними прикладами світу.

1. Мінімізувати розподілені дані

Зменшення спільних даних між нитками зменшує ймовірність проблем синхронізації. При використанні ниток, які працюють на незалежних даних, необхідність блокування механізмів, що дімінішує, що призводить до кращої продуктивності і простого коду. Наприклад, в веб-сервері, обробка декількох запитів, кожен нитка обробляє дані про запити без спільного стану.

2. Використовуйте пропер Синхронізація

При спільних даних необхідно правильного синхронізації даних забезпечує цілісність даних. Методики включають мукси, шпинлоки та змінні стану. Наприклад, модель виробника-симулятора використовує мустек і змінну умову для узгодження доступу до спільного буфера, запобігання умов раси і забезпечення консистенції даних.

3. Уникайте заблокувань

Зблоки відбуваються при різких роботах, які відбуваються один на одному. Для запобігання цього набувають блокування в послідовному порядку і мінімізації тривалості блокування. Прикладом є система бази даних, де операції набувають декількох замків; встановлення суворого порядку збирання замку дозволяє уникнути умов кругових очікування.

4. Дизайн для масштабування

За допомогою багатопрочитаних додатків, які пристосовуються ефективно, як кількість потоків збільшується. Використовуйте пули для управління ресурсами і не створюючи зайвих ниток. Наприклад, за допомогою серверного додатка використовується нижковий басейн для обробки вхідних з'єднань, зберігаючи продуктивність під високим навантаженням.

5. Використовуйте атомні операції при апробації

Атомні операції забезпечують нижню-безпечну оновлення для спільних змін без чіткого блокування. Вони корисні для лічильників або прапорів. Наприклад, для підведення спільної лічильника за допомогою атомної fetch-і-add забезпечує вірність без замкаючого накладу.