ホームページ  >  記事  >  バックエンド開発  >  C++ 同時プログラミングの同期プリミティブの詳細な説明

C++ 同時プログラミングの同期プリミティブの詳細な説明

WBOY
WBOYオリジナル
2024-05-31 22:01:04756ブラウズ

C++ マルチスレッド プログラミングでは、同期プリミティブの役割は、共有リソースにアクセスする複数のスレッドの正確性を保証することです。ミューテックス (Mutex): 共有リソースを保護し、同時アクセスを防止します。実行を続行する前に特定の条件が満たされるのを待ちます。アトミック操作: 操作が中断されない方法で実行されることを保証します。

C++ 并发编程中的同步原语详解

C++同時プログラミングにおける同期プリミティブの詳細な説明

マルチスレッドプログラミングでは、複数のスレッドが共有リソースにアクセスする際の正確性を保証できる同期プリミティブが重要です。 C++ は、ミューテックス ロック、条件変数、アトミック操作などの豊富な同期プリミティブ セットを提供します。

Mutex (ミューテックス)

Mutex は、共有リソースを保護するために使用される同期メカニズムです。スレッドがミューテックス ロックを取得すると、ミューテックス ロックが解放されるまで他のスレッドはブロックされます。 C++ では、std::mutex クラスを使用してミューテックス ロックを実装できます。 std::mutex 类来实现互斥锁:

std::mutex mtx;
// ...
{
    // 获取互斥锁
    std::lock_guard<std::mutex> lock(mtx);
    // 临界区
} // 互斥锁在离开作用域时自动释放

条件变量 (Condition Variable)

条件变量允许线程等待某个特定条件满足才继续执行。在 C++ 中,可以使用 std::condition_variable

std::condition_variable cv;
// ...
{
    std::unique_lock<std::mutex> lock(mtx);
    // 等待条件满足
    cv.wait(lock);
    // 执行条件满足后要执行的代码
}

条件変数

条件変数を使用すると、スレッドは続行する前に特定の条件が満たされるまで待機できます。を実行します。 C++ では、std::condition_variable クラスを使用して条件変数を実装できます。

std::atomic<int> counter;
// ...
counter++; // 原子地增加 counter 的值

アトミック操作

アトミック操作は、操作が中断されない方法で実行されることを保証します。 C++ では、アトミック ライブラリを使用してアトミック操作を実行できます。

std::atomic<int> counter;
std::mutex mtx;

// 写入线程
void write_thread() {
    while (true) {
        // 原子地增加计数器
        counter++;
    }
}

// 读取线程
void read_thread() {
    while (true) {
        // 保护地读取计数器
        std::lock_guard<std::mutex> lock(mtx);
        std::cout << "Counter: " << counter << std::endl;
    }
}

int main() {
    std::thread t1(write_thread);
    std::thread t2(read_thread);
    t1.join();
    t2.join();
    return 0;
}

🎜実際的なケース🎜🎜🎜 共有カウンタと書き込みスレッドを持つプログラムを考えてみましょう。書き込みスレッドはカウンタをアトミックにインクリメントする必要がありますが、読み取りスレッドは慎重にカウンタを読み取る必要があります: 🎜rrreee

以上がC++ 同時プログラミングの同期プリミティブの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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