2009-05-19 4 views
6

Я спрашиваю о внедрении .Net - System.Data.SQLite. Есть ли рекомендации по его использованию в потокобезопасном режиме?Безопасен ли SQLite.Net?

Я знаю, что сам SQLite может быть скомпилирован with or without thread safety - но как был скомпилирован System.Data.SQLite?

ответ

8

Он не является потокобезопасным, поэтому вы не можете делиться объектами подключения или аналогичными по потокам.

Исправления ошибок в потоке, упомянутые в файле readme, связаны с несколькими потоками, использующими несколько соединений (то есть каждый по одному) в один и тот же файл, а также какие проблемы или условия гонки могут возникнуть.

Например, условие гонки нитей, указанное для BEGIN и BEGIN IMMEDIATE, имело неудачный эффект, хотя поток, выданный BEGIN, еще один поток, который выпустил BEGIN, впоследствии мог получить доступ к базе данных до первого. Эти типы ситуаций были исправлены.

Но соединения с базой данных (oracle, sqlite, ms sql server) в .NET не являются потокобезопасными и не являются окружающими объектами.

+3

Чтобы добавить небольшое количество к вышесказанному - спецификация ADO.NET НЕ рекомендует или требует, чтобы они были потокобезопасными. Вы должны использовать одно соединение для потока - это дизайн ADO.NET. –

+0

Как насчет чтения? Безопасно ли разделять доступ только для чтения по потокам? – axe

Смежные вопросы