您好,登錄后才能下訂單哦!
C++ 多線程庫提供了一些函數和類來實現并發控制策略,主要包括互斥鎖(mutex)、條件變量(condition variable)和原子操作(atomic operations)等
std::mutex
類提供了互斥鎖的實現。示例代碼:
#include<iostream>
#include<thread>
#include <mutex>
std::mutex mtx; // 全局互斥鎖
int shared_data = 0; // 共享數據
void thread_function() {
std::unique_lock<std::mutex> lock(mtx); // 獲取互斥鎖
++shared_data; // 修改共享數據
lock.unlock(); // 釋放互斥鎖
}
int main() {
std::thread t1(thread_function);
std::thread t2(thread_function);
t1.join();
t2.join();
std::cout << "Shared data: "<< shared_data<< std::endl;
return 0;
}
std::condition_variable
類提供了條件變量的實現。示例代碼:
#include<iostream>
#include<thread>
#include <mutex>
#include<condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool ready = false; // 共享狀態
void worker_thread() {
std::unique_lock<std::mutex> lock(mtx);
while (!ready) { // 如果共享狀態為 false,則等待
cv.wait(lock);
}
std::cout << "Worker thread is ready."<< std::endl;
}
void main_thread() {
std::this_thread::sleep_for(std::chrono::seconds(1)); // 模擬延遲
{
std::unique_lock<std::mutex> lock(mtx);
ready = true; // 修改共享狀態
}
cv.notify_one(); // 喚醒等待的線程
}
int main() {
std::thread worker(worker_thread);
main_thread();
worker.join();
return 0;
}
std::atomic
類模板提供了原子操作的實現。原子操作通常用于實現無鎖數據結構和高性能的并發算法。示例代碼:
#include<iostream>
#include<thread>
#include<atomic>
std::atomic<int> shared_data(0); // 原子整數類型的共享數據
void thread_function() {
++shared_data; // 原子操作,自增 1
}
int main() {
std::thread t1(thread_function);
std::thread t2(thread_function);
t1.join();
t2.join();
std::cout << "Shared data: "<< shared_data.load()<< std::endl;
return 0;
}
這些并發控制策略可以根據具體的應用場景和需求進行組合使用,以實現高效、安全的多線程編程。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。