C++提供了多个并发编程库,其中一些常用的包括:
1. std::thread:C++11引入的标准库,提供了线程的支持,可以创建、管理和同步线程。
2. std::mutex、std::lock_guard和std::unique_lock:C++11引入的标准库,提供了互斥量和锁的支持,用于保护共享资源的并发访问。
3. std::condition_variable:C++11引入的标准库,提供了条件变量的支持,用于线程间的等待和通知机制。
4. std::atomic:C++11引入的标准库,提供了原子操作的支持,用于保证原子性的共享数据访问。
5. std::future和std::promise:C++11引入的标准库,提供了异步计算的支持,用于获取异步操作的结果。
6. OpenMP:OpenMP是一套用于共享内存并行编程的API,可以在C++中使用,并提供了一些指令和函数来实现并行化。
7. Intel Threading Building Blocks (TBB):Intel TBB是一个C++的并行编程库,提供了丰富的并行算法和数据结构,用于简化并行编程的任务。
8. Boost.Thread:Boost.Thread是一个开源的C++多线程库,提供了线程管理、互斥量、条件变量等功能。
9. Pthreads:Pthreads是POSIX线程库,提供了跨平台的多线程支持,可以在C++中使用。
以下是使用Boost.Thread库的示例代码,实现了线程的创建、互斥锁的使用和线程间的同步:
#include <iostream>
#include <boost/thread.hpp>
// 共享数据
int sharedData = 0;
// 互斥锁
boost::mutex mtx;
// 线程函数
void threadFunction()
{
for (int i = 0; i < 5; ++i) {
// 上锁
boost::mutex::scoped_lock lock(mtx);
// 修改共享数据
++sharedData;
// 打印当前线程和共享数据的值
std::cout << "Thread ID: " << boost::this_thread::get_id()
<< ", Shared Data: " << sharedData << std::endl;
// 休眠一段时间
boost::this_thread::sleep_for(boost::chrono::milliseconds(100));
}
}
int main()
{
// 创建线程
boost::thread t1(threadFunction);
boost::thread t2(threadFunction);
// 等待线程执行完毕
t1.join();
t2.join();
return 0;
}
上述代码中,我们使用了Boost.Thread库,定义了一个共享的整型变量`sharedData`和一个互斥锁`mtx`。在线程函数`threadFunction`中,我们先上锁`mtx`,然后对共享数据`sharedData`进行修改并打印出当前线程的ID和共享数据的值,最后休眠一段时间。在`main`函数中,我们创建了两个线程`t1`和`t2`,分别调用了线程函数`threadFunction`。然后通过`t1.join()`和`t2.join()`等待这两个线程执行完毕。
在这个示例中,我们使用互斥锁保护了共享数据的访问,确保了线程之间的同步。这样,两个线程修改共享数据时不会发生竞争条件,保证了数据的正确性。