
目录1 背景2 具体应用2.1 互斥锁 mutex1 背景在C开发工作中经常会遇到需要多个线程可能访问同一代码段或者数据的情况而锁机制则可以确保同一时间只有一个线程能够对目标进行访问从而避免竞态条件race conditions和数据不一致等问题。2 具体应用2.1 互斥锁 mutex互斥锁属于C 11引入的经典锁机制需要手动进行上锁和解锁一旦上锁资源将被独占直到使用结束但是在实际开发中存在容易忘记写解锁步骤的情况。需要包含的头文件#include mutex代码具体应用方式// 包含头文件 #include mutex // 定义互斥锁 std::mutex your_mtx // 互斥锁上锁 your_mtx.lock() // // 具体目标 // // 互斥锁解锁 your_mtx.unlock()2.2 共享互斥锁 shared_mutexshared_mutex是C 17引入的共享互斥锁支持多读单写需要包含的头文件#include shared_mutex普通写法#include shared_mutex std::shared_mutex your_shmtx; // 写独占 your_shmtx.lock(); // // 具体目标 // your_shmtx.unlock(); // 读共享 your_shmtx.lock_shared(); // // 具体目标 // your_shmtx.unlock_shared();可以写成RAII写法这样就不用手动上锁解锁只需在目标代码前面加上读或写的对应写法即可#include mutex // unique_lock, shared_lock #include shared_mutex std::shared_mutex your_shmtx; // 写锁独占 std::unique_lock w(your_shmtx); // 读锁共享 std::shared_lock r(your_shmtx);