在目标c中使用@synchronized指令产生死锁和活动锁问题
||
从苹果的《线程编程指南》中,我读到“避免死锁和活锁情况的最佳方法是一次只锁一个”。如果我更喜欢在代码中使用@synchronized指令,则意味着我应该执行以下操作:
@synchronized(aObj){
@synchronized(bObj) {
// do sth with the aObj and bObj here
}
}
代替这个:
@synchronized(aObj,bObj){
// do sth with the aObj and bObj here
}
??如果不是,则表示“一次锁一次?”。谢谢...
没有找到相关结果
已邀请:
3 个回复
号拳藐孔妇
这可能导致顺序: 一把锁。 B锁b。 A尝试锁定b,然后停止并等待。 B尝试锁定a,停止并等待。 现在,两个线程都在等待对方释放它们所需的资源,从而导致死锁。 如果更改线程
,使其依次锁定
和
,则死锁将变得不可能。
翰冒绢县
这也适用于其他锁定结构。喜欢:
疾很毋悲
如果一个线程以与另一线程不同的顺序执行嵌套锁(先使用一个锁,然后使用另一个锁),则可能会出现死锁。避免这种情况的一个简单规则是永远不要有两个嵌套的锁。