Qt中的锁(1)
加锁,把多个要访问的公共资源通过锁保护起来,把并行执行变成串行执行,
多个线程执行加锁的对象得是同一个对象,不同对象不会互斥
代码:
//添加一个static成员static int num;//创建锁对象static QMutex mutex;void run();
//创建两个线程对象Thread t1;Thread t2;t1.start();t2.start();//加上线程等待,让主线程等待这两线程执行t1.wait();t2.wait();//打印结果qDebug()<<Thread::num;
void Thread::run()
{for(int i=0;i<50000;i++){mutex.lock();num++;mutex.unlock();}
}
其中num是一个两个线程访问的公共变量,之前如果是并发执行,第一个改变,第二个也会改变,就会出现问题
加了锁之后,第一个线程顺利拿到锁继续执行++,此时第二个线程要进来就会阻塞,直到第一个线程释放锁才会放第二个进入,把第二个线程从阻塞中释放