最近开发中遇到的死锁问题比较多, 近段时间总结了下还是基础不够扎实:
在继续的开发过程中, 会不定期更新开发中遇到的并发死锁问题
2016-11-7
今天遇到个数据库并发问题问题
一般数据库查询结构如下:
@Semaphore_Wait(MUTEX)
[self yourOwnHandle:^(FMDatabase *db,BOOL *rollback) {
id result;
// query update operation ....bla bla bra
block(result)
}
@Semaphore_Single(MUTEX)
在外部使用可能会出现bug, 如果你这样使用:
@begin ViewController.m
{
@property resultForVc
}
-(void) xxxMethod{
方法中我们调用数据库查询方法得到结果 reuslt
此时如果: _resultForVc = result 会导致什么结果呢 ?
结果会导致dbqueue无法释放, 因为在内部定义的reuslt生命周期重定义到了ViewController中
}
@end