gpt4 book ai didi

objective-c - sqlite ios线程访问

转载 作者:行者123 更新时间:2023-11-29 11:11:38 31 4
gpt4 key购买 nike

我正在尝试编写一个多线程(使用 NSOperationQueues 在主线程上进行写入和执行读取)应用程序来访问 sqlite 数据库数据。我知道 sqlite 默认情况下不是线程安全的,但我们添加了多线程预处理器宏并将日志模式设置为 wal。

根据此 sqlite 文档:http://www.sqlite.org/faq.html#q6看来我们需要在写任何东西之前完成所有准备好的陈述。这是真的?有什么办法可以避免这种情况吗?如果我们有同一个数据库的两个句柄怎么办?

基本上,我们希望同时进行多次读取和一次写入,但正在尝试找出最佳方法。

提前致谢。

最佳答案

线程模式由编译时、启动或运行时选项决定。此处有更多详细信息:

http://www.sqlite.org/threadsafe.html

文档说序列化是默认值,这意味着您可以从多个线程使用它 - 它会保护您所有的访问被序列化。如果您想要更多的并行性,您可以使用具有多个连接对象的多线程模式。

如果您使用多线程,请确保同一数据库连接对象在任一时间点不被多个线程使用:

Multi-thread. In this mode, SQLite can be safely used by multiple threads provided that no single database connection is used simultaneously in two or more threads.

但是,请确保复杂性是合理的。与所有性能问题一样,测量之前和之后。

编辑:确保这一点的一种方法是创建您自己的池化机制。创建一个包含 n 个连接句柄的池,每个并行任务获取并释放到池中。文档说多线程模式在连接之间是完全安全的。这样,您就不必担心所有其他交易或报表都已完成。一个单独的读取线程/连接和写入线程/连接实际上是一个非常简单的硬编码池。

关于objective-c - sqlite ios线程访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11304275/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com