2012-11-08 32 views
5

Tôi nhận được exc_bad_access khi sử dụng nhiều người đọc cho sqlite trên iOS. WAL được kích hoạt trên cơ sở dữ liệu và sqlite3_threadsafety trả về 2 vì vậy đây không phải là vấn đề.sqlite3_prepare_v2 exc_bad_access

Mã tôi đang sử dụng hoạt động tốt cho 100 nghìn người dùng hầu hết thời gian, nhưng có một số điều kiện đa luồng nhất định khiến sqlite3_prepare_v2 có exc_bad_access. Về cơ bản khi tôi đẻ trứng hai chủ đề để làm một loạt các lần đọc nó bị treo.

Với WAL và chủ đề an toàn sqlite, nhiều chủ đề không phải là vấn đề nhưng không thể tìm ra nguyên nhân gây ra exc_bad_access này.

Xin cảm ơn trước.

+0

điều này có thể giúp bạn: http://stackoverflow.com/questions/2323684/sqlite-concurrency-issues – Raviprakash

Trả lời

5

Trong ý nghĩa đó SQLite3 không phải là thread an toàn refer SQLite document

By "thread" chúng tôi có nghĩa là bạn có thể sử dụng các kết nối cơ sở dữ liệu SQLite khác nhau trong chủ đề khác nhau cùng một lúc. Nó không bao giờ được an toàn để sử dụng cùng một kết nối cơ sở dữ liệu cùng một lúc trong nhiều chủ đề. Nếu bạn sử dụng API sqlite3_prepare() để tạo các câu lệnh đã chuẩn bị, mỗi câu lệnh đã chuẩn bị được coi là một phần của kết nối cơ sở dữ liệu mà từ đó nó được dẫn xuất. Vì vậy, bạn không thể chạy hai câu lệnh chuẩn bị bắt nguồn từ cùng một kết nối cơ sở dữ liệu trong các luồng khác nhau cùng một lúc.

Các vấn đề liên quan