sqliteのスレッドモデル

公式サイト:https://www.sqlite.org/c3ref/open.html

転載:https://blog.csdn.net/yifanernei/article/details/5642127

スレッドSQLiteのは、3モードをサポートしています。
1.シングルスレッドモード
    このモードでは、危険な何の排他的、マルチスレッド
2.マルチスレッドモード
    このモードでは、単一のデータベース接続は、危険なマルチスレッドされていませんそうでない場合、それは安全です。(翻訳:複数のスレッドは、データベース接続を共有することはできません)
。3.シリアルモード
    このモードでは、SQLiteは、スレッドセーフです。(注釈:同じデータベース接続を使用して、複数のスレッドであっても相互に排他的でなし)

 (ソースのSQLiteライブラリからコンパイル)(SQLiteのアプリケーションの初期化を使用して)スレッドモード、コンパイル時または実行時に開始する(データベース接続を作成する)が指定されています。一般的には、指定されたランタイムモードが起動モードに指定し、起動時に指定したモードは、コンパイル時のモードを無効にします上書きされます。シングルスレッドモードが指定されているしかし、一度、それは上書きできません。
    デフォルトのスレッドモデルは、シリアルモードです。

 

スレッドモデルを選択してコンパイル時間を
    スレッドモデルを指定するには、SQLITE_THREADSAFEマクロを定義することによって。指定しない場合、デフォルトではシリアルモードです。マクロ定義SQLITE_THREADSAFE = 1シリアルモードを指定0 =単一スレッドモード; 2 =マルチスレッドモード。
    sqlite3_threadsafe()関数は、指定されたスレッド・モードの値がコンパイル時に決定されてもよい返します。シングルスレッドモードが指定されている場合、この関数はfalseを返します。シリアルまたはマルチスレッド・モードが指定されている場合、この関数は真を返します。sqlite3_threadsafe()関数モード以前のマルチスレッド・モードと実行モードよりも、起動を選択しているので、両スタートアップ及びランタイムを区別することができないマルチスレッドモードとシリアルモードを区別することができません。

注釈:最後の文はsqlite3_threadsafe機能を実装することによって理解することができます

SQLITE_APIのint型 sqlite3_threadsafe(ボイド){ 戻り SQLITE_THREADSAFEと、}

 

   あなたは構築するとき、それは省略排他的な、重要なロジックたので、コンパイル時シングルスレッドモードを指定すると、そのため、起動時や実行時にシリアルモードまたはマルチスレッドモードを指定することはできません。場合

 

あなたが起動したときにスレッドモードを選択して
    、あなたがコンパイル時にシングルスレッドモードを指定しない場合、アプリケーションがスレッドモードを変更する()関数を初期化されるとき、あなたはsqlite3_configを使用することができます。SQLITE_CONFIG_SINGLETHREADパラメータは、シリアルモードとして指定SQLITE_CONFIG_SERIALIZEDシングルスレッドモード、マルチスレッド・モードのために指定SQLITE_CONFIG_MULTITHREADとして指定することができます。

スレッドモードを選択し
    、作成したときにいないときは、コンパイル時にシングルスレッドモードに指定して起動し、その後、各データベース接続が別々のマルチスレッドモードまたはシリアルモードとして指定することができますが、シングルスレッドモードとして指定することはできません。コンパイル時に指定またはシングルスレッドモードを起動した場合、接続を作成するとき、あなたはマルチスレッドまたはシリアルモードを指定することはできません。
    関数へsqlite3_open_v2()第三引数との接続を作成するときにスレッドモードが指定されています。SQLITE_OPEN_NOMUTEXロゴは、接続のマルチスレッドモードを作成し、SQLITE_OPEN_FULLMUTEXシリアル接続を作成するモードを特定します。あなたが身元を指定するか、データベース接続を作成するsqlite3_open()またはsqlite3_open16()関数を使用しない場合は、コンパイル時に指定するか、デフォルトのスレッド・モデルとして使用するスレッドモデルを起動します。

再試行する使用sqlite3_busy_handler()関数で発生するマルチスレッドデータベースに競争するために、マルチスレッドモデルのみを開い

 

おすすめ

転載: www.cnblogs.com/chechen/p/10956896.html