81 QReadWriteLock

81.1 读写锁

利用QMutex表示的互斥体给代码区加锁,可以保证该区中的代码在任何时候只被获得锁的那个线程执行。这对于避免因多个线程同时对共享数据执行写操作而导致的并发冲突是有效的。但有时多个线程只是想同时读取共享数据,这其实并不会引发冲突。最好能在加锁时区分读写,只在必须同步时同步,降低对并发性的削弱,提高运行性能。

QReadWriteLock类所表示的读写锁,在某种程度上满足了上述要求:

这就叫“读共享,写独占”。

81.2 案例

81.2.1 创建项目

通过QtCreator,在C:\Users\Minwei\Projects\Qt路径下,创建名为ReadWriteLock的控制台(Console)项目。

81.2.2 实现功能

C:\Users\Minwei\Projects\Qt\ReadWriteLock\main.cpp:

81.2.3 测试验证

81.2.3.1 使用QMutex

运行效果如图所示:

81.2.3.2 使用QReadWriteLock

运行效果如图所示: