본문 바로가기
데이터베이스/SQLite

SQLite 다중 스레드 응용프로그램 사용

by MonoSoft 2023. 2. 17.
728x90
반응형

SQLite 다중 스레드 응용프로그램 사용

 

1. 개요

 

SQLite는 세 가지 스레딩 모드를 지원합니다.

단일 스레드. 이 모드에서는 모든 뮤텍스가 비활성화되고 

SQLite는 한 번에 단일 스레드에서 

사용하지 않는 것이 안전합니다.

 

멀티 스레드. 이 모드에서SQLite는 

두 개 이상의 스레드에서 단일 데이터베이스 

연결이 동시에 사용되지 않는 경우 

여러 스레드에서 안전하게 사용할 수 있습니다.

 

직렬화. 직렬화된 모드에서SQLite는 

제한 없이 여러 스레드에서 안전하게 

사용할 수 있습니다.

 

스레딩 모드는 컴파일 시간

(SQLite 라이브러리가 소스 코드에서 컴파일되는 경우) 

또는 시작 시간

(SQLite를 사용하려는 응용 프로그램이 초기화되는 경우) 

또는 런타임(새 SQLite 데이터베이스 연결이 생성되는 경우)에서 

선택할 수 있습니다. 

일반적으로 런타임은 시작 시간과 

시작 시간 재정의 컴파일 시간 

재정의를 재정의합니다. 

 

제외하면 단일 스레드 모드를 선택한 경우 재정의할 수 없습니다.

 

기본 모드가 직렬화됩니다.

 

2. 스레딩 모드의 컴파일 타임 선택

SQLITE_THREADSAFE 컴파일 시간 매개 변수를 

사용하여 스레딩 모드를 선택합니다. 

 

컴파일 시간 매개 변수에 

SQLITE_THREADSAFE 없는 경우 

직렬화된 모드가 사용됩니다. 

이 -DSQLITE_THREADSAFE=1로명시적으로 

만들 수 있습니다. -DSQLITE_THREADSAFE=0의 

스레딩 모드는 단일 스레드입니다. 

-DSQLITE_THREADSAFE=2의 

스레딩 모드는 멀티 스레드입니다.

 

sqlite3_threadsafe() 인터페이스의 

반환 값은 컴파일 타임 스레딩 모드 

선택에 의해 결정됩니다. 

 

컴파일 타임에 단일 스레드 모드를 선택하면 

sqlite3_threadsafe() false를 반환합니다. 

 

다중 스레드 또는 직렬화된 모드를 선택하면 

sqlite3_threadsafe() true를 반환합니다.

sqlite3_threadsafe() 인터페이스는 

다중 스레드 모드와 시작 시간 및 런타임 

모드 선택을 선행하므로 다중 스레드 및 직렬화된 

모드를 구분할 수 없으므로 시작 시간 또는 

런타임 모드 변경 사항을 보고할 수도 없습니다.

 

컴파일 타임에 단일 스레드 모드를 

선택한 경우 중요한 뮤텍스싱 논리가 빌드에서 

생략되며 시작 시간 또는 런타임에 

다중 스레드 또는 직렬화된 모드를 사용할 수 없습니다.

 

3. 스레딩 모드의 시작 시간 선택

컴파일 시간 스레딩 모드가 단일 스레드가 아니라고 

가정하면 sqlite3_config() 인터페이스를 

사용하여 초기화 중에 스레딩 모드를 변경할 수 있습니다. 

SQLITE_CONFIG_SINGLETHREAD 동사는 

SQLite를 단일 스레드 모드로 설정하고, 

SQLITE_CONFIG_MULTITHREAD 동사는 

멀티 스레드 모드를 설정하고, 

SQLITE_CONFIG_SERIALIZED 동사는 직렬화된 모드를 설정합니다.

 

4. 스레딩 모드의 런타임 선택

컴파일 시간 이나 시작 시간에 

단일 스레드 모드를 선택 하지 않은 경우 개별 

데이터베이스 연결을 멀티 스레드 또는 직렬화 로 만들 수 있습니다. 

개별 데이터베이스 연결을 단일 

스레드 모드로 다운그레이드할 수 없습니다. 

 

컴파일 시간 또는 시작 시간 모드가 

단일 스레드인 경우 개별 데이터베이스 연결을 

에스컬레이션할 수도 없습니다.

 

개별 데이터베이스 연결에 대한 스레딩 모드는 

sqlite3_open_v2()에대한 세 번째 인수로 

지정된 플래그에 의해 결정됩니다. 

 

SQLITE_OPEN_NOMUTEX 플래그로 인해 

데이터베이스 연결이 다중 스레드 모드에 있고 

SQLITE_OPEN_FULLMUTEX 플래그로 인해 

연결이 직렬화된 모드에 있습니다. 

 

플래그가 지정되지 않거나 sqlite3_open() 

또는 sqlite3_open16()가 sqlite3_open_v2()대신 

사용되는 경우 컴파일 시간 및 시작 시간 설정에 의해 

결정된 기본 모드가 사용됩니다.

 

728x90
반응형

'데이터베이스 > SQLite' 카테고리의 다른 글

sqlite 팁 TIP  (0) 2023.03.03
특정문자 바꾸기  (0) 2023.02.23
테이블, 컬럼의 존재여부  (0) 2023.02.22
sqlite 형변환 , 특정문자 변환  (0) 2023.02.21
[sqlite] 문자열 자르기 그 외 팁  (0) 2023.02.20

댓글