C++ 互斥锁(mutex)是一种同步原语,用于确保多个线程在访问共享资源时不会发生数据竞争。互斥锁通过以下两种方式保证数据一致性:
互斥访问:当一个线程获得互斥锁时,其他试图获得该锁的线程将被阻塞,直到锁被释放。这样可以确保同一时刻只有一个线程访问共享资源,从而避免了数据竞争。
有序访问:当一个线程获得互斥锁后,其他线程必须等待该线程释放锁才能继续执行。这样可以确保对共享资源的访问顺序是可控的,从而避免了数据不一致的问题。
下面是一个简单的 C++ 互斥锁示例,展示了如何使用 std::mutex
保护共享资源:
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx; // 定义一个互斥锁
int shared_data = 0; // 定义一个共享资源
// 线程函数,用于对共享资源进行操作
void thread_func() {
for (int i = 0; i < 1000; ++i) {
mtx.lock(); // 获取互斥锁
++shared_data; // 对共享资源进行操作
mtx.unlock(); // 释放互斥锁
}
}
int main() {
std::thread t1(thread_func); // 创建一个线程
std::thread t2(thread_func); // 创建另一个线程
t1.join(); // 等待线程 t1 完成
t2.join(); // 等待线程 t2 完成
std::cout << "Shared data: " << shared_data << std::endl; // 输出共享资源的结果
return 0;
}
在这个示例中,我们使用 std::mutex
保护了共享资源 shared_data
,确保了对它的访问是互斥的,从而保证了数据一致性。