C++ マルチスレッド プログラミングの重要な概念は、スレッドをどのように同期するかということです。

WBOY
リリース: 2024-06-03 11:55:56
オリジナル
434 人が閲覧しました

C++ マルチスレッド同期の主要な概念: ミューテックス ロック: クリティカル セクションに 1 つのスレッドのみがアクセスできるようにします。条件変数: 特定の条件が満たされたときにスレッドを起動できます。アトミック操作: 共有変数の変更のアトミック性を確保するための、中断のない単一の CPU 命令。

C++ 多线程编程的关键概念是如何同步线程的?

C++ マルチスレッド プログラミングの重要な概念: スレッド同期

スレッド同期は、複数のスレッドが共有リソースに安全にアクセスし、競合やデータ破損を回避できるようにするための重要な部分です。以下に、C++ におけるスレッド同期の重要な概念を紹介します。

Mutex:

Mutex (ミューテックス) は、一度に 1 つのスレッドのみがクリティカル セクションにアクセスできるようにするアクセス制御メカニズムです。つまり、同期アクセスが必要です。コードエリア。ミューテックス ロックを使用すると、複数のスレッドが共有変数を同時に変更してデータ破損を引き起こすことを防ぐことができます。

std::mutex mtx;  // 定义互斥锁对象

void someFunction() {
    std::lock_guard<std::mutex> lock(mtx);  // 在进入临界区前加锁
    // 访问临界区代码
}
ログイン後にコピー

条件変数:

条件変数を使用すると、特定の条件が満たされたときにスレッドを起動できます。これは、あるスレッドが別のスレッドのデータ生成を待機している場合など、協調的なマルチスレッド プログラミングで役立ちます。

std::condition_variable cv;  // 定义条件变量对象
std::mutex mtx;  // 关联的互斥锁对象

void produce() {
    std::lock_guard<std::mutex> lock(mtx);  // 加锁
    // 产生数据
    cv.notify_all();  // 通知所有等待此条件的线程
}

void consume() {
    std::unique_lock<std::mutex> lock(mtx);  // 加锁
    cv.wait(lock);  // 等待 `produce()` 函数生产数据
    // 消费数据
}
ログイン後にコピー

アトミック操作:

アトミック操作は、他のスレッドによって中断できない単一の CPU 命令であり、共有変数への変更がアトミックであることが保証されます。

std::atomic<int> count;  // 定义原子变量

void incrementCount() {
    count++;  // 原子方式增加 `count`
}
ログイン後にコピー

実際のケース:

次のマルチスレッド プログラムを考えてみましょう:

std::vector<int> numbers;  // 共享的整型数组

void addNumber(int n) {
    numbers.push_back(n);
}

int main() {
    std::thread t1(addNumber, 1);
    std::thread t2(addNumber, 2);
    t1.join();
    t2.join();
    
    std::cout << "Numbers in the vector: ";
    for (int n : numbers) {
        std::cout << n << " ";
    }
    std::cout << std::endl;
    
    return 0;
}
ログイン後にコピー

この例では、

配列は複数のスレッドによって同時にアクセスできる共有リソースです。同期対策を講じないと、競合状態が発生し、データが破損する可能性があります。 numbers

配列に安全にアクセスするには、ミューテックス ロックを使用できます:

void addNumber(int n) {
    std::lock_guard<std::mutex> lock(mtx);  // 在访问数组前加锁
    numbers.push_back(n);
}
ログイン後にコピー

この方法では、一度に 1 つのスレッドのみが配列にアクセスできるため、データの整合性が確保されます。

出力:

Numbers in the vector: 1 2 
ログイン後にコピー

以上がC++ マルチスレッド プログラミングの重要な概念は、スレッドをどのように同期するかということです。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!