qt sqlite 需要互斥访问吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt sqlite 需要互斥访问吗相关的知识,希望对你有一定的参考价值。

参考技术A 编译、运行、程序输出:

Id: 1, Username: Alice, Password: passw0rd

输出了我们刚刚插入的数据,和我们预料的一样。

在程序的工作目录里(编译出来的可执行文件所在目录)有一个名为 sqlitedata.db 的文件。这是因为 db.setDatabaseName(sqlitedata.db) 设置了要访问的 SQLite 的数据库文件名,访问时如果发现没有这个文件,Qt 会为我们创建,如果这个文件已经存在,就继续使用它。使用 SQLite 的工具,查看一下 sqlitedata.db 的结构与数据:

image

可以看到有一个 user 表,其创建语句为 CREATE TABLE user(id integer primary key autoincrement, username text not null, password text not null, email text, mobile text),正是我们的程序里的建表语句,在表 user 里有我们插入的 1 条数据。

Qt入门教程QObject篇线程同步

同步线程

虽然线程的目的是允许代码并行运行,但有时线程必须停止并等待其他线程。例如,如果两个线程尝试同时写入同一变量,则结果未定义。强制线程彼此等待的原则称为互斥。它是保护共享资源(如数据)的常用技术。

Qt 提供了用于同步线程的低级基元以及高级机制。

低级同步基元

QMutex 是强制互斥的基本类。线程锁定互斥体以获取对共享资源的访问权限。如果第二个线程在已锁定时尝试锁定互斥体,则第二个线程将进入休眠状态,直到第一个线程完成其任务并解锁互斥锁。

QReadWriteLockQMutex类似,除了它区分“读取”和“写入”访问。当一段数据未写入时,多个线程同时读取它是安全的。QMutex强制多个读取器轮流读取共享数据,但QReadWriteLock允许同时读取,从而提高并行性。

QSemaphoreQMutex的推广,它保护一定数量的相同资源。相比之下,QMutex只保护一个资源。信号

以上是关于qt sqlite 需要互斥访问吗的主要内容,如果未能解决你的问题,请参考以下文章

43.QT-访问远程SQLite数据库

qt操作sqlite 如何使用vacuum命令?

SQLite 线程安全和并发

给 Qt sqlite 增加加密功能

Qt/QTableView/SQLite如何连接?

Qt操作Sqlite类封装,及命令行导入csv文件到Sqlite数据库