在C++中,进程的同步与互斥通常通过线程的同步与互斥来实现。以下是一些常用的方法:
- 互斥锁(Mutex):互斥锁是最常用的同步机制之一,用于保护共享资源,确保同时只有一个线程可以访问共享资源。通过调用
std::mutex
的lock()
和unlock()
方法来实现。
#include <mutex>
std::mutex mtx;
void func() {
mtx.lock();
// 访问共享资源
mtx.unlock();
}
- 条件变量(Condition Variable):条件变量用于线程之间的通信,一个线程可以等待另一个线程发出的信号。通过
std::condition_variable
的wait()
,notify_one()
和notify_all()
方法来实现。
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
void func1() {
std::unique_lock<std::mutex> lck(mtx);
// 条件为假,等待信号
cv.wait(lck);
// 条件为真,继续执行
}
void func2() {
{
std::lock_guard<std::mutex> lck(mtx);
// 修改条件
}
cv.notify_one(); // 发送信号
}
- 原子操作(Atomic Operation):原子操作是一种在多线程环境下保证操作的原子性的方法,通常用于对共享资源的读写操作。通过
std::atomic
模板类来实现。
#include <atomic>
std::atomic<int> count(0);
void func() {
count.fetch_add(1); // 原子增加操作
}
- 信号量(Semaphore):信号量用于控制多个线程对共享资源的访问,通过
std::semaphore
或第三方库来实现。
以上是一些常用的方法,可以根据具体的需求选择合适的同步与互斥机制来保护进程中的共享资源。
网友留言: