溫馨提示×

如何用C++實現Linux下的并發控制

小樊
48
2025-06-23 21:16:36
欄目: 編程語言

在Linux下使用C++實現并發控制,通常會涉及到多線程編程。C++11標準庫提供了<thread>頭文件,它包含了一些用于多線程編程的工具。此外,還有<mutex>、<condition_variable>、<future>、<atomic>等頭文件,它們提供了同步機制,如互斥鎖、條件變量、未來(用于異步操作)和原子操作。

以下是一個簡單的例子,展示了如何使用C++11的線程和互斥鎖來實現并發控制:

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

std::mutex mtx; // 創建一個互斥鎖

void print_block(int n, char c) {
    mtx.lock(); // 加鎖
    for (int i = 0; i < n; ++i) {
        std::cout << c;
    }
    std::cout << '\n';
    mtx.unlock(); // 解鎖
}

int main() {
    std::thread th1(print_block, 50, '*');
    std::thread th2(print_block, 50, '$');

    th1.join(); // 等待線程th1結束
    th2.join(); // 等待線程th2結束

    return 0;
}

在這個例子中,我們定義了一個print_block函數,它接受兩個參數:一個是要打印的字符數量n,另一個是字符c。在函數內部,我們使用mtx.lock()來獲取互斥鎖,確保在同一時間只有一個線程可以執行打印操作。打印完成后,使用mtx.unlock()釋放鎖。

main函數中,我們創建了兩個線程th1th2,它們都調用print_block函數,但是打印不同的字符。通過調用join方法,我們確保主線程等待這兩個線程完成后再退出。

除了互斥鎖,C++還提供了其他同步機制,例如:

  • std::lock_guard:一個方便的RAII(Resource Acquisition Is Initialization)風格的鎖管理類,它在構造時加鎖,在析構時自動解鎖。
  • std::unique_lock:一個比std::lock_guard更靈活的鎖管理類,它允許延遲鎖定、時間鎖定、遞歸鎖定等。
  • std::condition_variable:用于線程間的等待/通知機制。
  • std::atomic:用于實現原子操作,保證操作的原子性,避免數據競爭。

使用這些工具,你可以根據不同的場景選擇合適的并發控制策略。在實際應用中,還需要注意死鎖、活鎖等問題,并采取相應的預防措施。

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