Qt软件开发文档13---线程互斥
来源:互联网 发布:seo技术可以自学吗 编辑:程序博客网 时间:2024/06/05 02:44
以下内容来源:
QT5 开发及实例(第二版)
实现线程互斥与同步常用的类 有
QMutex,QMutexLocker,QReadWriterLocker,QReadLocker,QWriteLocker,QSemaphore,QWaitCondition
EG:
class Key:{public: Key(){key = 0;} int createKey(){++key;return key;} int value() const{return key;}private: int key;}
如果key值等于0,线程一和线程二同时将0载入寄存器,执行+1操作写入主存,则结果是两个线程的执行结果将互相覆盖,实际上仅进行了1次+1的操作。
这时候 我们需要将线程串行执行
1.互斥量
互斥量可通过QMutex或者QMutexLocker类实现
QMutex类
QMutex类对互斥量的处理,它被用来保护一段临界区代码,即每次只允许一个线程访问这段代码
class Key:{public: Key(){key = 0;} int createKey(){mutex.lock();++key;return key;mutex.unlock();} int value() const{mutex.lock();return key;mutex.unlock();}private: int key; QMutex mutex;}
存在问题 ruturn之后 unlock()永远不会执行
QMutexLocker
QMutexLocker简化了互斥量的处理,在构造函数中接受一个QMutex对象作为参数并将其锁定,在析构函数中解锁互斥量,这样就解决了上述问题。
class Key:{public: Key(){key = 0;} int createKey(){QMutexLocker.locker(&mutex);++key;return key;} int value() const{QMutexLocker.locker(&mutex);return key;}private: int key; QMutex mutex;}
实际应用中,使用QMutexLocker类,通常只需要这一条语句,大大简化了编程的复杂程度。
信号量
信号量可以理解为对互斥量功能的扩展,互斥量只能锁定一次而信号量可以锁定多次,它可以用来保护一定数量的程序资源。
待续…
1 0
- Qt软件开发文档13---线程互斥
- Qt软件开发文档10---数据传递
- Qt软件开发文档11---更新数据
- Qt软件开发文档12---scrollBar样式
- Qt软件开发文档1---Cmake编译QT程序
- Qt软件开发文档20----Qt语言翻译家
- 进程(线程)互斥的软件实现--皮特森(Peterson)算法
- Peterson算法-软件实现进程(线程互斥)
- Qt软件开发文档3---mainAPP调用dllManager中函数
- Qt软件开发文档4---主窗口的实现
- Qt软件开发文档5---父指针传递的妙用
- Qt软件开发文档6---dockWidget自定义标题栏
- Qt软件开发文档7---全局变量(方法)的声明
- Qt软件开发文档9---封装类调用
- Qt软件开发文档17---自定义messagebox窗口
- 线程同步互斥
- 线程互斥
- 线程互斥
- Oracle参数修改是否需要重启等
- 如何使用linux连接外部windows上的数据库记录
- Linux 时间修改--date -s命令
- Solaris移动删除几天前的软件
- Linux中fstab文件的配置和理解
- Qt软件开发文档13---线程互斥
- 关于Oracle物化视图
- ORA-01659: unable to&n…
- 11G在用EXP导出时,空表不能导出解…
- SQLSERVER2008备份对日志文件的操…
- Java 调用 Javascript 函数的范例
- Oracle中的进制转换
- ios即时通讯客户端开发之-mac上安装MySQL
- 使用TO_CHAR显示系统的SCN值