首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果可能有多个线程对SQLite数据库执行插入/更新操作,我应该始终使用锁吗?

问如果可能有多个线程对SQLite数据库执行插入/更新操作,我应该始终使用锁吗?
EN

Stack Overflow用户
提问于 2019-11-29 00:15:12
回答 1查看 67关注 0票数 1

我有一段使用lock的代码:

代码语言:javascript
复制
            lock (l)
            {
                db2.BeginTransaction();
                try
                {
                    rc1 = db2.Execute(s);
                    db2.Commit();
                }
                catch (Exception ex)
                {
                    db2.Rollback();
                    Crashes.TrackError(ex,
                        new Dictionary<string, string> {
                            {"RunExecute", "Exception"},
                            {"sql", s },
                            {"Device Model", DeviceInfo.Model },
                        });
                    throw;
                }
            }

以及其他不支持的代码:

代码语言:javascript
复制
            db2.Insert(new QuizHistory()
            {
                QuizId = quiz,
                Cards  = (App.viewablePhrases ?? GetViewablePhrases(MO.Quiz)).Count,
                Score = score,
                UtcNow = (int)Math.Truncate(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds),
                Viewed = 1,
                Deck   = Helpers.Deck.GetTitle()
            });

为了减少出现问题的可能性,我应该在访问数据库的所有代码周围添加lock(l)吗?

EN

回答 1

Stack Overflow用户

发布于 2020-01-31 16:17:29

一次只能为一个线程提供对SQLite数据库的访问。

如果您使用SQLite-Net-PCL库来操纵SQLite数据库,那么您应该考虑使用asynchronous API来实现对SQLite数据库多线程并发访问。

有关SQLite数据库多线程支持的更多信息,请参阅official documentation和related question

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59092880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档