
有锁
std::unique_lock支持手动unlock、延迟构造、try-lock、move语义及配合condition_variable;std::lock_guard仅RAII自动加锁/解锁,不可干...
std::condition_variable必须与std::mutex配合使用,所有wait/notify操作须在同mutex保护下进行;需用lambda条件判断防虚假唤醒;notify_one/a...
ExecutionContext.SuppressFlow用于临时禁止当前线程的ExecutionContext向异步操作或新线程自动传递,包括AsyncLocal、安全上下文等;需与RestoreF...
MySQL中锁在COMMIT或ROLLBACK执行完成的那一刻才统一释放,由InnoDB两阶段锁协议决定,与隔离级别无关;隔离级别仅影响锁类型和范围。
SpinLock适用于临界区极短(
std::atomic保证单变量原子操作但不自动无锁,是否无锁取决于类型和平台,需用is_lock_free()检查;它不保证多变量一致性,不能替代mutex保护复杂状态,内存序必须显式指定。
std::lock_guard适用于进作用域加锁、出作用域解锁的简单场景,仅支持自动加锁/解锁,不支持手动控制;std::unique_lock则支持延迟加锁、手动unlock、条件变量协作及移动语义...
原生map并发读写会panic,因扩容时无锁保护;sync.Map适用于读多写少场景;自封装RWMutex+map更可控;高竞争时可考虑分片map。
SELECT...FORUPDATE用于先查后改场景(如扣库存),加排他锁;SELECT...LOCKINSHAREMODE用于协同只读场景(如报表),加共享锁;二者均需事务、索引支持,否则退化为表锁...
GoWeb事务需手动控制,无自动回滚;必须在HTTPhandler中显式Begin/Commit/Rollback,绑定单次请求,避免锁持有和连接池耗尽。