在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;
}
在实际应用中,应该尽量减少锁的使用范围,避免死锁,并且考虑使用更高级的同步机制来提高性能。