临界区和同一线程上锁

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();
    }
};
相关推荐
SamDeepThinking11 小时前
一个业务场景只需要一个ThreadLocal实例
java·后端·程序员
程序大视界11 小时前
【Python系列课程】Python入门教程
开发语言·人工智能·python
带刺的坐椅11 小时前
Solon 热加载与插件热插拔:Debug 模式 × E-Spi × H-Spi 全解析
java·solon·插件·plugin·热插拨
Rick199311 小时前
mysql联合索引经典实例
java·数据库·mysql
morning_judger11 小时前
Agent系列(二)-记忆系统的设计
开发语言·python·机器学习
方也_arkling11 小时前
【Java-Day02】语法篇:变量/数据类型/标识符/运算符/类型转换
java·开发语言
RSTJ_162511 小时前
PYTHON+AI LLM DAY SIXTY-ONE
开发语言·python
zfoo-framework11 小时前
理解kotlin limitedParallelism(1)与Actor模型
android·开发语言·kotlin
.千余11 小时前
【C++】C++类与对象3:const成员函数与取地址运算符重载,权限管理的艺术
开发语言·c++
影寂ldy11 小时前
C# 类和对象
开发语言·c#