146 字
1 分钟
FMDB-死锁问题
[queue inTransaction:^(FMDatabase *db, BOOL *rollback) { [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]]; [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]]; [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]]; [queue inDatabase:^(FMDatabase *db) { // do work B }]; if (whoopsSomethingWrongHappened) { *rollback = YES; return; } // etc… [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]]; }];- 使用fmdb进行数据库操作,出现inDatabase: was called reentrantly on the same queue, which would lead to a deadlock这样的崩溃错误.原因是在一个[queue inDataBase]的block中,又执行了一个inDataBase.这时第一个block需要执行结束才能出队列,第二个block才能执行.但是第一个block又包含了第二个block,也就是说第二个block不执行,第一个block就不能结束.于是就互相等待,也就是各种死锁