C++ 对多线程/并发的支持
多线程/并发编程是现代应用程序的必备特性,它能够显著地提高程序的性能和响应能力。C++是一种支持多线程/并发编程的高级编程语言,它提供了一套完整的多线程/并发编程库和标准库,包括线程、互斥锁、条件变量、原子操作、线程局部储存、异步编程等重要的特性。
线程
线程是C++的核心多线程/并发编程构件,它可以在同一个进程中运行多个并发的执行流。C++提供了线程类std::thread
来创建、管理和协调线程,一个线程对象可以通过调用它的join()
方法来等待线程执行结束,并释放线程的资源。下面是一个简单的示例:
#include <iostream>
#include <thread>
void hello() {
std::cout << "Hello, world!" << std::endl;
}
int main() {
std::thread t(hello);
t.join();
return 0;
}
该程序由一个主线程和一个子线程组成,主线程创建了一个子线程并等待其执行结束。子线程执行了hello()
函数,输出了“Hello, world!”的字符串。运行该程序将会有如下输出:
Hello, world!
互斥锁
互斥锁是多线程/并发编程中重要的同步机制之一,它可以用来保护共享数据的访问,防止多个线程同时修改相同的数据,从而产生数据竞争和不确定的行为。C++提供了std::mutex
类型的互斥锁,它可以通过lock()
和unlock()
方法加锁和解锁锁对象,使得在同一时间内只有一个线程可以访问受锁保护的资源。下面是一个示例:
#include <iostream>
#include <thread>
#include <mutex>
std::mutex m;
void print(int id) {
m.lock();
std::cout << "Thread " << id << " is running." << std::endl;
m.unlock();
}
int main() {
std::thread t1(print, 1);
std::thread t2(print, 2);
t1.join();
t2.join();
return 0;
}
该程序由一个主线程和两个子线程组成,子线程分别执行了print()
函数。在print()
函数的中间,使用了互斥锁来保护共享的输出流,使得输出结果不会混淆。运行该程序将会有如下输出:
Thread 1 is running.
Thread 2 is running.
总结
C++对多线程/并发编程的支持非常丰富,除了线程和互斥锁,还有条件变量、原子操作、线程局部储存、异步编程等特性。在编写并发程序时,需要注意多线程/并发编程的常见问题,如死锁、数据竞争、内存泄漏等。只有掌握了这些知识,并学习了相关的案例,才能编写出高质量且可扩展的并发程序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ 对多线程/并发的支持(上) - Python技术站