您好,登錄后才能下訂單哦!
在 Linux 中,C++11 提供了對線程間安全通信的支持,主要通過原子操作(atomic operations)和互斥鎖(mutexes)來實現
<atomic>
頭文件,其中包含了一系列原子類型和操作。使用原子操作可以確保線程間的安全通信,例如:#include <atomic>
#include <thread>
std::atomic<int> shared_data(0);
void thread_func() {
for (int i = 0; i < 1000; ++i) {
shared_data.fetch_add(1);
}
}
int main() {
std::thread t1(thread_func);
std::thread t2(thread_func);
t1.join();
t2.join();
std::cout << "Shared data: " << shared_data.load() << std::endl; // 輸出 2000
return 0;
}
<mutex>
頭文件,其中包含了一系列互斥鎖相關的類和函數。使用互斥鎖可以確保線程間的安全通信,例如:#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
int shared_data = 0;
void thread_func() {
for (int i = 0; i < 1000; ++i) {
std::lock_guard<std::mutex> lock(mtx);
shared_data++;
}
}
int main() {
std::thread t1(thread_func);
std::thread t2(thread_func);
t1.join();
t2.join();
std::cout << "Shared data: " << shared_data << std::endl; // 輸出 2000
return 0;
}
在這個例子中,我們使用 std::lock_guard
來自動管理互斥鎖的生命周期。當 std::lock_guard
對象被創建時,它會自動鎖定互斥鎖,當對象被銷毀時(例如,離開作用域時),它會自動解鎖互斥鎖。這樣可以確保在多線程環境下對共享資源的訪問是線程安全的。
除了原子操作和互斥鎖之外,還有其他線程間安全通信的方法,例如條件變量(condition variables)和讀寫鎖(read-write locks)。在實際應用中,可以根據具體需求選擇合適的方法來實現線程間的安全通信。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。