SQLite和多线程

时间:2014-09-10 10:02:00

标签: multithreading sqlite locking

我正在使用SQLite和.Net 4.5,Winforms

我有一个只有一列的表,同时有几个线程在运行。我希望第一个线程从第一行读取值,然后删除它,然后下一个线程应该再次读取现在不同的第一个值并删除它,依此类推......我该如何实现?

让我试着描述现在发生的事情。让我们说我有一个专栏" Names"在具有这些值的表中:

约翰

鲍勃

阿尔伯特

当我用三个线程运行我的应用程序时,第一个读取" John,"第二个读" John,"第三个读"约翰。"在那之后," John"行已删除。

我希望第一个帖子能够阅读" John"并删除行,第二个线程要读取" Bob"并删除行,第三个线程阅读" Albert"并删除它。

更多信息:

每个线程都会打开自己与数据库的连接。

每个线程使用相同的方法读取值,然后使用相同的连接删除行,方法的伪代码是:

打开连接

读取值

删除行

关闭连接

我可以发布实际代码,但我不认为问题出在我的代码中。我正在寻找一种方法来锁定"线程正在读取和删除线程时的表,但似乎无法找到一种方法。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

只需使用transactions

BEGIN;
SELECT Name FROM MyTable LIMIT 1;
DELETE FROM MyTable WHERE Name = :WhatIveJustRead;
COMMIT;