您当前的位置: 首页 >  qt

令狐掌门

暂无认证

  • 0浏览

    0关注

    513博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

令狐掌门 发布时间:2019-08-19 21:20:51 ,浏览量: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条机器命令:

  1. 将变量值载入寄存器;
  2. 将寄存器中的值加一;
关注
打赏
1652240117
查看更多评论
立即登录/注册

微信扫码登录

0.1382s