临界区和同一线程上锁

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();
    }
};
相关推荐
步行cgn7 分钟前
MyBatis Error evaluating expression ‘ids‘. Return value (3) was not iterable 错误详
java·后端
yujunl10 分钟前
总结一下U9客开的成果
开发语言
独隅10 分钟前
KMP 全栈进化:Koog 框架打造纯 Kotlin AI Agent 实战效果
开发语言·人工智能·kotlin
lhldsg24 分钟前
社区健身场地规划实战指南:从器材配置到智能化管理经验分享
java·开发语言·经验分享·小程序
LayZhangStrive25 分钟前
后端通识 - 后端工程开发常用的流程图类别
java·流程图·后端开发
WIN赢44 分钟前
【抽象思想-从复杂中抽离简单、收敛的口子】
java·前端·javascript
captain3761 小时前
多线程单例模式
java·单例模式·java-ee
xiaotianyuanma1 小时前
【计算机毕业设计】基于Spring Boot的体育馆预约系统的设计与实现
java·spring boot·课程设计
何以解忧,唯有..1 小时前
MySQL 索引分类与底层原理深度剖析
java
SomeB1oody1 小时前
【RustyML入门】5.0. 模型评估
开发语言·后端·机器学习·rust·教程