MST

星途 面试题库

面试题:C++多线程编程中互斥锁的基本使用

在C++多线程编程环境下,假设有两个线程同时访问并修改一个共享变量count,使用C++标准库中的互斥锁(std::mutex)来确保数据的一致性,写出相应的代码示例,并解释关键步骤。
42.6万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>
#include <thread>
#include <mutex>

std::mutex mtx;
int count = 0;

void increment() {
    for (int i = 0; i < 1000000; ++i) {
        mtx.lock();
        ++count;
        mtx.unlock();
    }
}

int main() {
    std::thread t1(increment);
    std::thread t2(increment);

    t1.join();
    t2.join();

    std::cout << "Final count: " << count << std::endl;
    return 0;
}

关键步骤解释

  1. 定义互斥锁和共享变量
    • std::mutex mtx; 定义了一个互斥锁 mtx,用于保护共享资源。
    • int count = 0; 定义了共享变量 count,两个线程将同时对其进行修改。
  2. 线程函数
    • increment 函数模拟了对共享变量 count 的递增操作。
    • mtx.lock(); 在修改 count 之前锁定互斥锁,这样其他线程就无法同时进入这一临界区。
    • ++count; 对共享变量 count 进行递增操作。
    • mtx.unlock(); 修改完成后解锁互斥锁,允许其他线程进入临界区修改 count
  3. 主线程
    • 创建两个线程 t1t2,都执行 increment 函数。
    • t1.join();t2.join(); 等待两个线程执行完毕。
    • 最后输出共享变量 count 的最终值,由于使用了互斥锁保护,这个值应该是两个线程递增操作次数之和,即2000000。