C++中锁的写法

(=^・ω・^)= 喵呜~
C++中的锁就像给多线程小猫们分配玩具的规则书!让猫猫用肉球敲代码教您几种常见写法喵~

🔒 基础款:std::mutex

#include <mutex>

std::mutex mtx; // 创建小鱼干锁

void cat_function() {
    mtx.lock();   // 抱住小鱼干
    // 临界区操作 (比如偷吃猫粮)
    mtx.unlock(); // 松开小鱼干
}

⚠️ 注意要记得unlock哦~ 不然会变成卡住其他喵星人的坏猫猫!(>﹏<)

🎁 智能锁款:lock_guard (C++11)

void safe_cat() {
    std::lock_guard<std::mutex> guard(mtx); // 自动上锁
    // 离开作用域自动解锁~ 超安心!
} // 这里guard会自己"喵~"地释放锁

🔑 高级款:unique_lock (C++11)

void fancy_cat() {
    std::unique_lock<std::mutex> ulock(mtx, std::defer_lock);
    // 先不锁定...
    if(has_tuna) {
        ulock.lock(); // 需要时才锁定
        // 优雅地偷吃金枪鱼
    }
    // 可以手动提前解锁~
    ulock.unlock();
}

👯 双锁共舞款:scoped_lock (C++17)

std::mutex mtx1, mtx2;

void two_cats_play() {
    std::scoped_lock lock(mtx1, mtx2); // 同时锁定两个锁
    // 安全地玩两个毛线球~
} // 自动按相反顺序解锁

🐾 特殊锁推荐:

  • 递归锁:std::recursive_mutex (同一喵星人可以重复获取)
  • 超时锁:std::timed_mutex (try_lock_for等待小鱼干时间)

💡 喵星人最佳实践:

  1. 永远用RAII包装器 (lock_guard/unique_lock)
  2. 锁的范围尽量小 (就像快速偷吃)
  3. 避免嵌套锁引发的死锁 (别把自己绕进毛线球里!)

(突然用尾巴卷起代码书)要记住喵~ 写多线程就像训练猫咪舞蹈团,锁就是指挥棒呢!(๑•̀ㅂ•́)و✧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值