C++中的并行与并发基础与使用详解
什么是并行与并发?
- 并行:同时执行多个任务,多个任务之间相互独立,无需相互协作。
- 并发:多个任务交替执行,但是任务之间需要通过同步机制来进行协作。
C++中的并行与并发
C++11 提供了许多并行化和并发化的工具,如线程,原子,互斥量等,这些工具都在 std
命名空间中。我们需要包含 <thread>
, <atomic>
和 <mutex>
头文件以使用这些工具。
创建和启动线程
我们可以通过创建和启动线程来实现并行处理。C++11 中的 <thread>
头文件可以用来创建线程。在启动线程时,我们需要给线程一个函数,可以是全局函数,成员函数或 lambda 表达式。
示例1:创建和启动线程
#include <iostream>
#include <thread>
void thread_function()
{
std::cout << "thread function\n";
}
int main()
{
std::thread t(&thread_function); // 创建一个新线程,并指定一个函数
std::cout << "main thread\n";
t.join(); // 等待线程完成
return 0;
}
输出:
main thread
thread function
使用互斥量
多个线程共享同一个内存空间,可能会导致争用和数据竞争问题。我们使用互斥量来解决这些问题。C++11 中的 <mutex>
头文件提供了 std::mutex
类型,它对一个资源进行锁定并且在它被释放之前不允许其他线程访问该资源。
示例2:使用互斥量
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx; // 互斥量
void thread_function()
{
std::lock_guard<std::mutex> lock(mtx); // 锁定互斥量,避免竞争
std::cout << "thread function\n";
}
int main()
{
std::lock_guard<std::mutex> lock(mtx); // 锁定互斥量,避免竞争
std::thread t(&thread_function); // 创建一个新线程,并指定一个函数
std::cout << "main thread\n";
t.join(); // 等待线程完成
return 0;
}
输出:
main thread
thread function
在上面的示例中,互斥量 mtx
被用来保护 std::cout
的使用,以确保在多个线程同时试图输出时,只有一个线程能够访问它。
总结
以上是 C++ 中的并行与并发基础与使用的详细攻略。我们可以通过创建和启动线程来实现并行处理,使用互斥量来解决数据竞争问题。同时,我们还可以使用其他的工具,如原子操作,条件变量等。在实践中,我们需要根据具体的问题选择合适的工具解决并行与并发问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中的并行与并发基础与使用详解 - Python技术站