56、QMutexLocker:互斥锁的自动管理---------多线程、竟态条件和同步

张开发
2026/4/8 20:08:17 15 分钟阅读

分享文章

56、QMutexLocker:互斥锁的自动管理---------多线程、竟态条件和同步
QMutexLocker互斥锁的自动管理QT给我们提供了自动加锁和解锁的类QMutexLocker实现了之前我们做的MyLocker的类似的功能。QMutexLocker是一个辅助类用于自动管理QMutex的锁定与解锁。通过RAII资源获取即初始化模式确保在作用域结束时自动释放锁避免因异常或忘记调用unlock()导致的死锁。使用步骤1创建一个QMutexLocker对象并传入一个QMutex指针。2在QMutexLocker对象的作用域内访问或修改共享资源。3离开作用域时QMutexLocker的析构函数自动释放锁。其使用方式基本时如下结构QMutex mutex; // 线程A执行 { QMutexLocker locker(mutex); // 访问共享资源 } // 自动解锁 // 线程B执行 { QMutexLocker locker(mutex); // 访问共享资源 } // 自动解锁实战案例我们将之前写的计算数字的程序改用QMutexLocker试试//线程开始后执行的任务 void ThreadWorker::slot_work() { _run true; int index 0; while(_run index 100000){ //使用QMutexLocker加载 QMutexLocker locker(global_mtx); //对全局变量累加1 global_num 1; index; } //发送数字变化信号 emit sig_num_changed(global_num); //发送完成信号 emit sig_finished(); }效果和之前一样可以实现数据安全计

更多文章