在Linux中使用C++进行并发编程,你可以使用C++11标准库中提供的线程支持库(<thread>
),以及同步原语如互斥锁(<mutex>
)、条件变量(<condition_variable>
)和原子操作(<atomic>
)。以下是一些基本的步骤和示例代码,帮助你开始使用C++进行并发编程。
#include <iostream> #include <thread> #include <mutex> #include <vector>
std::thread
类来创建一个新的线程。void helloFunction() { std::cout << "Hello from a thread!" << std::endl; } int main() { std::thread t(helloFunction); t.join(); // 等待线程完成 return 0; }
void greet(std::string name) { std::cout << "Hello, " << name << " from a thread!" << std::endl; } int main() { std::thread t(greet, "Alice"); t.join(); return 0; }
std::mutex
来保护共享资源,防止数据竞争。std::mutex mtx; // 全局互斥锁 int shared_data = 0; void increment() { mtx.lock(); // 加锁 ++shared_data; mtx.unlock(); // 解锁 } int main() { std::thread t1(increment); std::thread t2(increment); t1.join(); t2.join(); std::cout << "Shared data: " << shared_data << std::endl; return 0; }
std::lock_guard
来自动管理锁的生命周期。void increment() { std::lock_guard<std::mutex> lock(mtx); // 自动加锁和解锁 ++shared_data; } int main() { // ... 同上 }
std::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; }); // 等待直到ready为true // 执行工作... } void trigger() { std::lock_guard<std::mutex> lock(mtx); ready = true; cv.notify_all(); // 通知所有等待的线程 } int main() { std::thread worker(workerThread); // ... 做一些准备工作 ... trigger(); worker.join(); return 0; }
std::atomic
来进行无需锁的线程安全操作。std::atomic<int> shared_data(0); void increment() { ++shared_data; // 原子操作 } int main() { std::thread t1(increment); std::thread t2(increment); t1.join(); t2.join(); std::cout << "Shared data: " << shared_data << std::endl; return 0; }
这些是C++并发编程的基础。在实际应用中,你可能需要处理更复杂的同步问题,比如读写锁、屏障、future和promise等。随着你对C++并发编程的深入了解,你可以探索这些高级特性来构建更高效和健壮的多线程应用程序。