Sobes.tech
Junior — Middle

По какъв начин се осъществява обменът на данни между изпълнителните нишки?

sobes.tech AI

Отговор от AI

Обменът на данни между нишки в C/C++ може да се осъществи по няколко начина:

  1. Общи променливи и памет — нишките могат да четат и записват данни в обща област от паметта. За да се избегнат състезателни условия, се използват механизми за синхронизация (mutex-и, семафори).

  2. Mutex-и и блокировки — за защита на критичните секции и гарантиране на съгласуваността на данните.

  3. Условни променливи — позволяват на нишките да чакат определено състояние или събитие.

  4. Опашки за съобщения — нишките могат да обменят съобщения чрез безопасни за нишки опашки.

  5. Атомарни операции — за прости операции без блокировки, използвайки std::atomic.

Пример за използване на mutex за защита на обща променлива:

#include <iostream>
#include <thread>
#include <mutex>

int брояч = 0;
std::mutex mtx;

void увеличи() {
    for (int i = 0; i < 1000; ++i) {
        std::lock_guard<std::mutex> lock(mtx);
        ++брояч;
    }
}

int main() {
    std::thread t1(увеличи);
    std::thread t2(увеличи);
    t1.join();
    t2.join();
    std::cout << "Брояч: " << брояч << std::endl;
    return 0;
}

Затова изборът на метод за обмен на данни зависи от задачата и изискванията за синхронизация и производителност.