溫馨提示×

Linux C++環境下如何實現多線程同步

小樊
53
2025-03-29 03:36:56
欄目: 編程語言

在Linux C++環境下,可以使用C++11標準庫中的<thread><mutex>來實現多線程同步。以下是一些常用的同步原語:

  1. std::mutex:互斥鎖,用于保護共享數據,防止多個線程同時訪問。
  2. std::lock_guard:RAII風格的互斥鎖管理類,用于自動管理互斥鎖的鎖定和解鎖。
  3. std::unique_lock:更靈活的互斥鎖管理類,支持定時鎖定、遞歸鎖定等。
  4. std::condition_variable:條件變量,用于線程間的等待/通知機制。
  5. std::atomic:原子操作,用于實現無鎖并發。

下面是一個簡單的示例,展示了如何使用std::mutexstd::lock_guard實現多線程同步:

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

std::mutex mtx; // 全局互斥鎖

void print_block(int n, char c) {
    std::lock_guard<std::mutex> guard(mtx); // 自動管理互斥鎖的鎖定和解鎖
    for (int i = 0; i < n; ++i) {
        std::cout << c;
    }
    std::cout << '\n';
}

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

    // 創建10個線程,每個線程打印5個字符
    for (int i = 0; i < 10; ++i) {
        threads.emplace_back(print_block, 5, 'a' + i);
    }

    // 等待所有線程完成
    for (auto& t : threads) {
        t.join();
    }

    return 0;
}

在這個示例中,我們使用了std::mutex來保護print_block函數中的共享資源(即std::cout)。通過使用std::lock_guard,我們可以確保在離開作用域時自動釋放互斥鎖,從而避免死鎖和其他同步問題。

對于更復雜的同步需求,可以考慮使用std::condition_variablestd::atomic等高級同步原語。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女