江南才子 发表于 2021-7-8 20:48:20

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

  在多个线程访问同一个值时,可能会出现难以预估的结果,为了保证线程操作的原子性,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条机器命令:

[*]将变量值载入寄存器;
[*]将寄存器中的值加一;
[*]

  
文档来源:51CTO技术博客https://blog.51cto.com/u_12570763/3012400
页: [1]
查看完整版本: Qt线程同步之QMutex与QMutexLocker的使用