C++ 多线程编程和同步机制:详解和实例演示
C 多线程编程和同步机制是利用 C 标准库中的 <thread>、<mutex>、<condition_variable> 等头文件来实现的。以下是对 C++ 多线程编程和同步机制的详解和实例演示:
<thread>
<mutex>
<condition_variable>
C++11 引入了 <thread> 头文件,提供了创建和管理线程的标准接口。使用 std::thread 类可以创建新的线程。
std::thread
#include <iostream> #include <thread> // 线程函数 void threadFunction() { std::cout << "Hello from thread!" << std::endl; } int main() { // 创建新线程 std::thread t(threadFunction); // 等待线程结束 t.join(); return 0; }
互斥量(Mutex)是一种用于保护共享资源的同步机制。C++ 提供了 std::mutex 类来实现互斥量。使用 std::lock_guard 类可以自动管理互斥量的加锁和解锁。
std::mutex
std::lock_guard
#include <iostream> #include <thread> #include <mutex> std::mutex mtx; // 全局互斥量 void threadFunction() { // 加锁 std::lock_guard<std::mutex> lock(mtx); std::cout << "Hello from thread!" << std::endl; // 自动解锁 } int main() { // 创建新线程 std::thread t(threadFunction); { // 主线程加锁 std::lock_guard<std::mutex> lock(mtx); std::cout << "Hello from main!" << std::endl; } // 自动解锁 // 等待线程结束 t.join(); return 0; }
条件变量(Condition Variable)是一种用于线程间通信的同步机制,用于等待某个条件达成。C++ 提供了 std::condition_variable 类来实现条件变量。
std::condition_variable
#include <iostream> #include <thread> #include <mutex> #include <condition_variable> std::mutex mtx; // 全局互斥量 std::condition_variable cv; // 全局条件变量 bool ready = false; // 共享条件 void threadFunction() { // 等待条件变量满足 std::unique_lock<std::mutex> lock(mtx); cv.wait(lock, []{ return ready; }); std::cout << "Hello from thread!" << std::endl; } int main() { // 创建新线程 std::thread t(threadFunction); { // 修改条件 std::lock_guard<std::mutex> lock(mtx); ready = true; } // 通知条件变量 cv.notify_one(); // 等待线程结束 t.join(); return 0; }
通过使用互斥量和条件变量,可以实现线程之间的同步和通信,保护共享资源并防止竞态条件的发生。这是 C++ 多线程编程中非常重要的一部分。