2017-09-07 11 views
-1

こんにちは、データベースのロックされた問題などの問題なしにバックグラウンドスレッドでディスパッチ非同期タスクを処理するsqliteデータベースを管理するためのアイデアやコードがあります。SQLiteデータベースはセカンダリディスパッチ非同期スレッドで動作することができます

+0

データベースロックの問題は何ですか?データベースファイルにアクセスしている間は、ロックされます。それは問題ですか? –

+0

同じテーブルの複数のスレッドによって同じ時間にデータベースにアクセスしている間。 –

答えて

0

xyz.sqliteファイルのすべてのクエリを実行するには、xyzDBMgrクラスを使用してください。 foo1foo2の方法を使用しているとします。 @synchronizedブロックを使用してテーブルをロックし、スレッドの安全を確保してください。

xyzDBMgr.m

@implementation xyzDBMgr 


void foo1 
{ 
    @synchronized(self) 
    { 
     // your locked code goes here 
    } 
} 

void foo2 
{ 
    @synchronized(self) 
    { 
     // your locked code goes here 
    } 
} 

... 
@end 

別のロック機能の内側にロック機能を呼び出さないでください。あなたがfoo2からfoo1を呼び出した場合、デッドロックは明らかです。

あなたがdispathc_asyncまたはNSOperationQueue API呼び出しのようなリンゴのGCD API呼び出しを使用することができ、二次スレッドからこれらのメソッドを呼び出したい場合。

関連する問題