溫馨提示×

如何在Linux下用C++進行并發編程

小樊
58
2025-03-04 22:58:15
欄目: 編程語言

在Linux下使用C++進行并發編程,通常會用到線程庫 <thread>、互斥鎖 <mutex>、條件變量 <condition_variable> 等。以下是一些基本的步驟和示例代碼,幫助你開始使用C++進行并發編程。

1. 包含必要的頭文件

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

2. 創建線程

使用 std::thread 類來創建線程。

void threadFunction(int id) {
    std::cout << "Thread " << id << " is running\n";
}

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

    for (int i = 0; i < 5; ++i) {
        threads.emplace_back(threadFunction, i);
    }

    for (auto& t : threads) {
        t.join();
    }

    return 0;
}

3. 使用互斥鎖保護共享數據

使用 std::mutex 來保護共享數據,防止數據競爭。

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

std::mutex mtx;
int sharedData = 0;

void incrementSharedData() {
    std::lock_guard<std::mutex> lock(mtx); // 自動管理鎖
    ++sharedData;
}

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

    for (int i = 0; i < 10; ++i) {
        threads.emplace_back(incrementSharedData);
    }

    for (auto& t : threads) {
        t.join();
    }

    std::cout << "Shared data: " << sharedData << "\n";

    return 0;
}

4. 使用條件變量進行線程同步

使用 std::condition_variable 來進行線程間的同步。

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

std::mutex mtx;
std::condition_variable cv;
bool ready = false;

void workerThread() {
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock, []{ return ready; });

    std::cout << "Worker thread is processing data\n";
}

void trigger() {
    std::this_thread::sleep_for(std::chrono::seconds(1));
    {
        std::lock_guard<std::mutex> lock(mtx);
        ready = true;
    }
    cv.notify_one();
}

int main() {
    std::thread worker(workerThread);
    std::thread triggerThread(trigger);

    worker.join();
    triggerThread.join();

    return 0;
}

5. 使用原子操作

對于簡單的數據類型,可以使用 std::atomic 來避免鎖的開銷。

#include <iostream>
#include <thread>
#include <atomic>

std::atomic<int> sharedData(0);

void incrementSharedData() {
    ++sharedData;
}

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

    for (int i = 0; i < 10; ++i) {
        threads.emplace_back(incrementSharedData);
    }

    for (auto& t : threads) {
        t.join();
    }

    std::cout << "Shared data: " << sharedData << "\n";

    return 0;
}

總結

以上是一些基本的并發編程概念和示例代碼。在實際應用中,你可能需要處理更復雜的并發場景,例如線程池、任務隊列、讀寫鎖等。C++標準庫提供了豐富的工具來幫助你進行并發編程,合理使用這些工具可以提高程序的性能和可靠性。

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