在Linux C++環境下,可以使用C++11標準庫中的<thread>和<mutex>來實現多線程同步。以下是一些常用的同步原語:
std::mutex:互斥鎖,用于保護共享數據,防止多個線程同時訪問。std::lock_guard:RAII風格的互斥鎖管理類,用于自動管理互斥鎖的鎖定和解鎖。std::unique_lock:更靈活的互斥鎖管理類,支持定時鎖定、遞歸鎖定等。std::condition_variable:條件變量,用于線程間的等待/通知機制。std::atomic:原子操作,用于實現無鎖并發。下面是一個簡單的示例,展示了如何使用std::mutex和std::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_variable和std::atomic等高級同步原語。