C++乐观锁和悲观锁代码
时间: 2023-08-09 16:05:09 浏览: 116
乐观锁和悲观锁是两种常用的并发控制技术。其中,乐观锁假设在修改数据时不会有其他线程修改相同的数据,因此不会加锁,而在修改时会检查数据是否被其他线程修改过。如果没有被修改过,则直接修改;否则,选择重新尝试或者放弃操作。悲观锁则假定在修改数据时会有其他线程修改相同的数据,因此会先加锁,保证同一时间只能有一个线程修改相同数据,避免数据的不一致性。
下面是一个简单的乐观锁和悲观锁的示例代码。
乐观锁:
```c++
#include <atomic>
// 假设有一个共享变量 count
std::atomic<int> count;
// 乐观锁
void optimistic_lock() {
int old_value, new_value;
do {
old_value = count.load();
new_value = old_value + 1;
// 检查 count 是否被其他线程修改过
} while (!count.compare_exchange_weak(old_value, new_value));
}
```
悲观锁:
```c++
#include <mutex>
// 假设有一个共享变量 count
int count;
std::mutex mtx;
// 悲观锁
void pessimistic_lock() {
mtx.lock();
// 修改 count
count++;
mtx.unlock();
}
```
需要注意的是,乐观锁适用于并发度高、冲突少的场景,而悲观锁适用于并发度低、冲突多的场景。在实际使用时需要根据具体场景选择合适的并发控制技术。
阅读全文