C++提供了多种多线程编程的方式来实现并发和同步。下面是一些常用的概念和技术:
- 并发:并发是指在同一时间段内执行多个任务。C++中的并发可以通过创建多个线程来实现。每个线程都可以独立执行自己的任务。
- 线程:线程是程序中的一个执行序列,可以同时执行多个线程,每个线程都有自己的栈、局部变量和执行路径。
- 同步:同步是指协调多个线程之间的执行顺序,以避免出现不确定的结果或冲突。
- 互斥锁:互斥锁是一种机制,用于保护共享资源的访问。在任意时刻,只有一个线程可以获得锁,其他线程必须等待。
- 条件变量:条件变量是一种线程间的通信机制,用于在某个条件满足时唤醒等待中的线程。
- 原子操作:原子操作是一种线程安全的操作,可以通过原子操作来保证共享数据的一致性。
下面是一个简单示例,展示了如何在C++中使用多线程实现并发与同步:
#include <iostream> #include <thread> #include <mutex> #include <condition_variable> std::mutex mtx; std::condition_variable cv; bool ready = false; void printNumber(int number) { std::unique_lock<std::mutex> lock(mtx); // 等待条件满足 cv.wait(lock, []{ return ready; }); // 执行任务 std::cout << "Thread " << std::this_thread::get_id() << ": " << number << std::endl; // 唤醒其他线程 cv.notify_all(); } int main() { std::thread threads[10]; for (int i = 0; i < 10; ++i) { threads[i] = std::thread(printNumber, i); } // 启动线程 { std::lock_guard<std::mutex> lock(mtx); ready = true; } cv.notify_all(); // 等待线程结束 for (int i = 0; i < 10; ++i) { threads[i].join(); } return 0; }
在上面的示例中,我们创建了10个线程,并使用互斥锁和条件变量来确保线程在执行任务前等待条件满足。主线程设置ready
为true
后,唤醒了等待中的线程,线程开始执行任务并打印结果。
这只是多线程编程中的基本概念和技术,还有更复杂的问题需要注意。在实际开发中,需要仔细考虑线程安全性、线程间通信和避免死锁等问题。