- 论坛徽章:
- 7
|
本帖最后由 smalloc 于 2010-11-12 03:34 编辑
回复 1# Cyberman.Wu
>>IGMP的timer中发送IGMP message时有可能会在已经获取read lock的情况下再次获取read lock.
好象中断中几乎没有读写锁这种要求,如果有那也是相当罕见
大部分用在进程和软中断中.
发生递归的情况下确实死锁,在你说的2种设计中前一种对于"自旋"锁也是本处理器不可重入.
仔细看下这帖子会发现一个是软中断一个是进程时递归在设计上应该是被避免的,2个软中断情况也一样,和中间是否插入写没关系.
http://linux.chinaunix.net/bbs/thread-1169235-1-1.html
剩下的就是2个进程情况.但是读写锁是一种自旋锁,在获得锁的时候是"应该"禁止内核抢占的,所以死锁也不会发生----这个待验证
如果IGMP中真如你说的那样.2次获得读锁出现在同一个软中断中.那么应该就是设计上的BUG
LZ可不可以具体说明下在哪里发生?
如果真是如此,按第2种设计仅仅需要保证读锁本处理器不重入就可以了
另 >>例如数据库中,往往会优先读锁,一旦有写锁等待读锁,则后面再发起的读锁会被“阻塞”。
这句话感觉有点说不通.如果按后面的说法读优先好象说不过去...只能说这是一种层次锁...是否是优先写锁的笔误? |
|