评论

收藏

[jQuery] Qt线程同步之QMutex与QMutexLocker的使用

开发技术 开发技术 发布于:2021-07-08 20:48 | 阅读数:473 | 评论:0

  在多个线程访问同一个值时,可能会出现难以预估的结果,为了保证线程操作的原子性,Qt提供了QMutex, QMutexLocker, QReadLocker, QWriteLocker, QReadWriteLocker, QSemaphore等类来进行线程访问控制。
  例如卖票程序的设计,要保证票号不重复,每卖一张,票号加一,有多个窗口同时卖,那么此时就得保证票的序号是一直递增,我们设计一个简单的类,如下所示:
class Ticket
{
public:
Ticket() { m_Cnt = 0; };
int keyAdd()
{
m_Cnt++;
return m_Cnt;
}
int getkey()
{
return m_Cnt;
}
private:
int m_Cnt;
};
          在多线程下这个类是不安全的,多个线程可能同时修改私有成员m_Cnt,结果是不可预料的。
         而且自增操作符“++”不是原子操作,编译后会是3条机器命令:

  • 将变量值载入寄存器;
  • 将寄存器中的值加一;


  
关注下面的标签,发现更多相似文章