
加锁
SQL锁范围由执行计划决定,取决于索引、隔离级别、语句写法等;无索引时WHERE条件可能导致全表锁,有合适索引则通常仅锁匹配行;RC下仅锁命中行,RR下加间隙锁扩大范围;批量操作需分批限流,FORUP...
SELECT...FORUPDATE锁表是因为WHERE条件未走索引,导致InnoDB无法行定位而升级为范围锁;应通过EXPLAIN确认索引使用,避免函数、隐式转换,并合理设计索引与事务边界。
“Lockwaittimeoutexceeded”是事务等待锁超时(默认50秒)被中止的错误,非死锁;常见于长事务、无索引更新或应用未提交;可通过INNODB_TRX等表定位阻塞源并KILL终止。
RAII通过对象生命周期管理资源,确保构造时获取、析构时释放。std::fstream用于文件自动关闭,std::lock_guard实现锁的自动加解锁,智能指针如std::unique_ptr和st...
ImmutableArray无需加锁即可线程安全读取,但每次写操作都复制整个数组,性能远低于加锁的List;适用场景为初始化后极少修改的只读集合或需值语义比较的场合。
ReaderWriterLock已过时,应改用ReaderWriterLockSlim;前者基于内核对象、开销大、无超时返回机制、不支持锁升级,后者为用户态高性能实现,支持超时、升级/降级、严格配对释...
必须用RAII(如std::lock_guard或std::unique_lock)管理std::mutex,禁用手动lock/unlock;多锁需用std::lock或std::scoped_loc...
死锁是多个事务因争夺资源陷入互相等待的僵局,由互斥、持有并等待、不可剥夺、循环等待四条件共同触发;典型场景为两事务以相反顺序更新相同行,导致闭环等待。
插入意向锁是InnoDB在INSERT前加的特殊间隙锁,不阻塞其他插入意向锁,仅与间隙锁或临键锁冲突,旨在减少并发插入锁冲突、提升吞吐量,但不当使用易引发死锁或锁等待。
MySQL多事务并发需隔离级别、锁机制与事务规范协同:默认REPEATABLEREAD适合多数场景,但应据业务选READCOMMITTED或SERIALIZABLE;须走索引以保障行锁,避免长事务与锁...