C++ 互斥锁(mutex)是一种同步原语,用于确保多个线程在访问共享资源时不会发生数据竞争。互斥锁通过以下两种方式保证数据一致性:
-
互斥访问:当一个线程获得互斥锁时,其他试图获得该锁的线程将被阻塞,直到锁被释放。这样可以确保同一时刻只有一个线程访问共享资源,从而避免了数据竞争。
-
有序访问:当一个线程获得互斥锁后,其他线程必须等待该线程释放锁才能继续执行。这样可以确保对共享资源的访问顺序是可控的,从而避免了数据不一致的问题。
下面是一个简单的 C++ 互斥锁示例,展示了如何使用 std::mutex
保护共享资源:
#include#include #include std::mutex mtx; // 定义一个互斥锁 int shared_data = https://www.yisu.com/ask/0; // 定义一个共享资源"hljs">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
,确保了对它的访问是互斥的,从而保证了数据一致性。