在Linux环境下,C++可以通过多种方式实现并发控制。以下是一些常用的方法:
互斥锁(Mutexes):
<mutex>
头文件中的std::mutex
类来实现互斥锁。lock()
和unlock()
成员函数来加锁和解锁。std::lock_guard
或std::unique_lock
来自动管理锁的生命周期。条件变量(Condition Variables):
<condition_variable>
头文件中的std::condition_variable
类。原子操作(Atomic Operations):
<atomic>
头文件中的原子类型,如std::atomic<int>
。信号量(Semaphores):
sem_wait()
、sem_post()
等函数。std::counting_semaphore
或std::binary_semaphore
。读写锁(Read-Write Locks):
<shared_mutex>
头文件中的std::shared_mutex
类。线程(Threads):
<thread>
头文件中的std::thread
类来创建和管理线程。join()
和detach()
来控制线程的生命周期。屏障(Barriers):
<barrier>
头文件中的std::barrier
类(C++20)。锁(Locks):
<shared_mutex>
头文件中的std::shared_lock
类。下面是一个简单的例子,展示了如何使用互斥锁来保护共享资源:
#include <iostream>
#include <mutex>
#include <thread>
std::mutex mtx; // 全局互斥锁
int shared_data = 0; // 共享数据
void increment_shared_data() {
mtx.lock(); // 加锁
++shared_data; // 修改共享数据
mtx.unlock(); // 解锁
}
int main() {
std::thread t1(increment_shared_data);
std::thread t2(increment_shared_data);
t1.join();
t2.join();
std::cout << "Shared data: " << shared_data << std::endl;
return 0;
}
在实际应用中,应该尽量减少锁的使用范围,避免死锁,并且考虑使用更高级的同步机制来提高性能。