2016-08-20 2 views
1

내 C++ 응용 프로그램에서 SQLite를 사용하고 있습니다. SQLite 스레딩 모드는 다중 스레드로 설정되어 단일 데이터베이스 연결을 공유하는 여러 스레드가 허용됩니다. 이 시나리오에서 아래와 같이 데이터베이스 작업을 래핑해야합니까? 아니면 필수가 아닌가?SQLite 다중 스레드 뮤텍스

void SomeClass::someDbOperationOnAThread(void *arg) { 
    sqlite3_mutex_enter(sqlite3_db_mutex(db)); 
    // Perform some queries on the database 
    sqlite3_mutex_leave(sqlite3_db_mutex(db)); 
} 

답변

0

documentation는 말한다 :

  • 멀티 스레드
      . 이 모드에서는 두 개 이상의 스레드에서 동시에 단일 데이터베이스 연결을 사용하지 않는다면 SQLite를 여러 스레드에서 안전하게 사용할 수 있습니다.
  • 그래서 여러 스레드에 대해 단일 연결을 사용할 수 없습니다.

    어떤 경우에도 단일 연결은 단일 트랜잭션 만 가질 수 있으므로 각 스레드마다 별도의 연결을 설정하는 것이 좋습니다.

    +0

    감사합니다. . 그럼, 여러 스레드가 데이터베이스에 자신의 연결을 가지고, 그렇다면, 작업에 여전히 뮤텍스가 있어야 말합니? – KBancho

    +0

    뮤텍스는 무엇입니까? 뮤텍스는 무엇을 보호합니까? –

    +0

    내 질문에 코드 스 니펫에서 볼 수있는 뮤텍스. 보호되는 것은 SomeClass의 멤버 속성입니다. 예를 들어, INSERT (마지막 행 ID)에서 반환 된 값을 가정 해 봅시다. – KBancho

    관련 문제