找回密码
 立即注册
首页 业界区 安全 C++ 锁
梁丘眉 2025-9-23 15:29:23
在多线程编程中,当多个线程同时访问共享资源时,可能会导致数据竞争(Data Race),产生不可预期的结果。锁提供了同步机制,确保在同一时间只有一个线程可以访问临界区。
锁的本质是通过互斥机制(Mutual Exclusion)确保:

  • 同一时间只有一个线程能进入访问共享资源的代码段(临界区);
  • 线程对共享资源的修改能被其他线程立即可见(避免 CPU 缓存导致的数据不一致)。
1、标准库锁类型

C++11 及后续标准在头文件中提供了多种锁类型,满足不同场景需求。
1.1 std::mutex:基础互斥锁

std::mutex是最基础的互斥锁,提供独占所有权 —— 同一时间仅允许一个线程锁定,其他线程尝试锁定时会阻塞等待,直到锁被释放。
核心操作

  • lock():锁定互斥锁(若已被锁定,当前线程阻塞);
  • unlock():解锁互斥锁(必须由持有锁的线程调用,否则行为未定义);
  • try_lock():尝试锁定(成功返回true,失败返回false,不阻塞)。
基础用法(手动加锁 / 解锁)
[code]#include #include #include std::mutex mtx; // 全局互斥锁int shared_value = 0;// 线程函数:对共享变量累加void increment() {    for (int i = 0; i < 10000; ++i) {        mtx.lock();       // 手动加锁        shared_value++;   // 临界区:安全修改共享资源        mtx.unlock();     // 手动解锁(必须执行,否则死锁)    }}int main() {    std::thread t1(increment);    std::thread t2(increment);    t1.join();    t2.join();    std::cout
您需要登录后才可以回帖 登录 | 立即注册