一。多线程间的互斥
<强>临界资源——每次只允许一个线程进行访问的资源
线程间的互斥——多个线程在同一个时刻需要访问临界资源
QMute类是一把线程锁,保证线程>强间的互斥,利用线程锁能够保证临界资源的安全性
QMutex中的关键成员函数
空白锁()——当锁空闲时,获取锁并继续执行;当锁被获取时,阻塞并等待释放
空白解锁()——释放锁(同一把锁的获取和释放必须在同一线程中成对出现)
a生产消费者问题
1。有n个生成者同时制造产品,并把产品放入仓库中
2。有m个消费者同时需要从仓库中取出产品
所定的规则是——当仓库未满,任意生产者可以存入产品,当仓库未空,任意消费者可以取出产品
代码示例
<代码> # include & lt; QCoreApplication> # include & lt; QThread> # include & lt; QMutex> # include & lt; QDebug> 静态QMutex g_mutex;//线程锁 静态QString g_store; 类生产商:公共QThread { 保护: 空白run () { int数=0; 而(真) { g_mutex.lock (); g_store.append (QString:数字(10)(计数+ +)%); qDebug () & lt; & lt;objectName () & lt; & lt;“:”+ g_store; g_mutex.unlock (); msleep (1); } } }; 类顾客:公共QThread { 保护: 空白run () { 而(真) { g_mutex.lock (); 如果(g_store !=" ") { g_store。删除(0,1); qDebug () & lt; & lt;objectName () & lt; & lt;“:”+ g_store; } g_mutex.unlock (); msleep (1); } } }; int主要(int命令行参数个数,char * argv []) { QCoreApplication(命令行参数个数,argv); 制片人p; 客户c; p.setObjectName(“制片人”); c.setObjectName(“客户”); p.start (); c.start (); 返回a.exec (); } 代码>
运行的结果
Qt -多线程间的互斥