临界区和同一线程上锁

1、临界区:多个线程/进程会并发访问、且每次只能允许一个执行单元进入执行的代码片段;里面通常操作共享资源(包括全局变量、硬件寄存器、文件、数据库记录、队列等)。

2、临界区的作用就是:保护共享资源,保证操作原子性、一致性。

3、针对同一个线程死锁的问题处理:使用recursive_mutex,它允许同一个线程多次上锁,例如:线程中,函数A上锁后调用B,B同样上锁,使用mutex如果A未解锁的情况下,会造成死锁;使用recursive_mutex可以避免死锁,但是要注意的是:锁了几次,就要解锁几次,否则对于其他线程而言,仍然无法获得锁,仅仅是同一个线程能获得锁。

cpp 复制代码
class Database {
    std::recursive_mutex mtx;
public:
    void update() {
        mtx.lock();
        // ... 更新数据逻辑
        log_change();    // 内部也会 lock
        mtx.unlock();
    }
    
    void log_change() {
        mtx.lock();      // 同一线程再次锁定,OK
        // ... 写日志
        mtx.unlock();
    }
};
相关推荐
jimy17 小时前
C++ 的 “移动语义”——Move Semantics
开发语言·c++
码云数智-园园7 小时前
C++ STL 容器怎么选?vector、list、map、unordered_map 优缺点对比
java·开发语言
en.en..7 小时前
竖线 |:管道、按位或、掩码组合
java·开发语言
techdashen7 小时前
Go Map 详解:键值对实际上是如何存储的
开发语言·后端·golang
程序猿乐锅7 小时前
【计算机组成原理 | 第六章】中央处理器 CPU
java·开发语言
大模型丫丫7 小时前
如何提升单体 Spring Boot 应用的并发数?
java·spring boot·后端
Terra.K7 小时前
ThreadLocal解决一个线程里面跨层传递问题
java·开发语言·后端
泡海椒8 小时前
低代码规则开发:JQuick-Java声明式配置驱动开发落地教程
java·低代码·rxjava
变与不变8068 小时前
引用类型、内存原理与对象
开发语言·前端·javascript
wuyk5558 小时前
从零吃透 MQTT 通信|第 5 章 MQTT 心跳保活机制深度优化,断线检测与智能自动重连
c语言·开发语言·stm32·学习