c++

C++互斥锁怎样保证数据一致性

小樊
82
2024-11-09 06:59:35
栏目: 编程语言

C++ 互斥锁(mutex)是一种同步原语,用于确保多个线程在访问共享资源时不会发生数据竞争。互斥锁通过以下两种方式保证数据一致性:

  1. 互斥访问:当一个线程获得互斥锁时,其他试图获得该锁的线程将被阻塞,直到锁被释放。这样可以确保同一时刻只有一个线程访问共享资源,从而避免了数据竞争。

  2. 有序访问:当一个线程获得互斥锁后,其他线程必须等待该线程释放锁才能继续执行。这样可以确保对共享资源的访问顺序是可控的,从而避免了数据不一致的问题。

下面是一个简单的 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,确保了对它的访问是互斥的,从而保证了数据一致性。

0
看了该问题的人还看了