是的,C++的条件变量(condition variable)可以处理复杂逻辑。条件变量是C++标准库中的一个同步原语,它允许线程等待某个条件成立,同时释放互斥锁(mutex),让其他线程继续执行。当条件成立时,等待的线程会被唤醒并重新获取互斥锁。
在处理复杂逻辑时,可以使用条件变量与其他同步原语(如互斥锁、信号量等)结合使用,以确保线程安全。以下是一个简单的示例,展示了如何使用条件变量处理复杂逻辑:
#include <iostream> #include <thread> #include <mutex> #include <condition_variable> std::mutex mtx; std::condition_variable cv; bool ready = false; void print_id(int id) { std::unique_lock<std::mutex> lck(mtx); // 等待条件成立 while (!ready) { cv.wait(lck); } // 条件成立,输出线程ID std::cout << "Thread " << id << '\n'; } void go() { std::this_thread::sleep_for(std::chrono::seconds(1)); { std::lock_guard<std::mutex> lck(mtx); ready = true; } // 唤醒所有等待的线程 cv.notify_all(); } int main() { std::thread threads[10]; // 创建10个线程 for (int i = 0; i < 10; ++i) threads[i] = std::thread(print_id, i); std::thread t(go); t.join(); for (auto &th : threads) th.join(); return 0; } 在这个示例中,我们创建了10个线程,它们都在等待一个条件(ready 变量)成立。主线程在1秒后设置条件成立,并唤醒所有等待的线程。这个例子展示了如何使用条件变量处理多个线程之间的同步和通信。当然,你可以根据实际需求编写更复杂的逻辑。