2013-09-26 5 views
0

저는 멀티 스레드에 대한 SQLite 문서 주위에서 머리를 감싸려고했지만 아직 이해하지 못했습니다. 두 개의 쓰레드가 DB에서 읽고 쓰는 것을 가정 해 보겠습니다. 나의 쓰기는 여러 SQL 문으로 구성, 그래서 나는, 명시 적 트랜잭션에서 그들을 포장이 같은 필요다중 스레드 환경에서 sqlite 사용

sqlite3_exec (myDb, "BEGIN TRANSACTION", 0, 0, 0); 
// write stuff here 
sqlite3_exec (myDb, "COMMIT TRANSACTION", 0, 0, 0); 
이 이

첫 번째 질문 : 내가 트랜잭션에서 읽기 작업을 마무리해야하나요 나를위한 주요 요구 사항은 쓰기 트랜잭션을 완료한다는까지를 절반의 기록 된 데이터를 읽을 수 없어야합니다.

두 번째 : 두 스레드 모두에서 하나의 데이터베이스 연결을 사용할 수 있습니까? - 두 스레드가 DB에 쓰고 따라서 두 트랜잭션을 모두 열면 두 번째 "BEGIN TRANSACTION"문이 실패하기 때문에 내가 할 수없는 것처럼 보입니다.

그럼 올바른 접근 방법은 무엇입니까? 자체 잠금 메커니즘을 사용 하시겠습니까? 스레드 당 하나의 연결을 사용합니까? -이 경우 SQL_BUSY/SQL_LOCKED에 대해 걱정해야합니까?

감사합니다.

+0

[SQLite threadsafe인가?] (https://sqlite.org/faq.html#q6) –

답변

0

두 스레드가 서로의 트랜잭션을 방해하면 안되기 때문에 별도의 연결을 사용해야합니다.

동시 트랜잭션을 사용하면 충돌이 발생할 수 있으므로 통화 중 시간 초과를 설정하거나 통화 중 처리기를 설치해야합니다. 모든 연결이 동일한 프로그램의 스레드에서 오는 경우 모든 트랜잭션을 뮤텍스로 묶어서 충돌을 피할 수 있습니다.

관련 문제