ホームページ  >  記事  >  バックエンド開発  >  C++ のマルチスレッドで共有リソースを処理するにはどうすればよいですか?

C++ のマルチスレッドで共有リソースを処理するにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-06-03 10:28:57946ブラウズ

C++ でミューテックス (mutex) を使用してマルチスレッド共有リソースを処理します: std::mutex を通じてミューテックスを作成します。 mtx.lock() を使用して、共有リソースに排他的にアクセスするためのミューテックスを取得します。ミューテックスを解放するには mtx.unlock() を使用します。

C++ のマルチスレッドで共有リソースを処理するにはどうすればよいですか?

C++ でのマルチスレッドでの共有リソースの処理

はじめに

マルチスレッド プログラミングでは、複数のスレッドが共有リソースに同時にアクセスすると、スレッド セーフティの問題が発生します。 Mutex (ミューテックス) は、1 つのスレッドだけが同時に共有リソースにアクセスできるようにする同期メカニズムであり、それによってデータの競合や破損を防ぎます。

ミューテックスの構文と使用法

C++ では、std::mutex を使用してミューテックスを作成できます: std::mutex 来创建互斥量:

std::mutex mtx;

要对共享资源进行排他访问,需要使用 lock()unlock()

mtx.lock(); // 获取互斥量
// 对共享资源进行操作
mtx.unlock(); // 释放互斥量

共有リソースに排他的にアクセスするには、lock() メソッドと unlock() メソッド:

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

std::mutex mtx;
int shared_resource = 0;

void increment_resource() {
    mtx.lock();
    shared_resource++;
    mtx.unlock();
}

int main() {
    std::vector<std::thread> threads;

    // 创建多个线程并行执行 increment_resource() 函数
    for (int i = 0; i < 1000; i++) {
        threads.push_back(std::thread(increment_resource));
    }

    // 等待所有线程执行完毕
    for (auto& thread : threads) {
        thread.join();
    }

    // 打印共享资源的最终值,此时的值应该是 1000
    std::cout << shared_resource << std::endl;

    return 0;
}
実際的なケース

以下は、共有リソースを保護するためにミューテックスを使用する実際的なケースです:🎜rrreee

以上がC++ のマルチスレッドで共有リソースを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。