Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Feb 2004 10:06:16 +0800 (CST)
From:      =?gb2312?q?popsong=20old?= <oldpopsong@yahoo.com>
To:        John Baldwin <jhb@FreeBSD.org>
Cc:        freebsd-current@freebsd.org
Subject:   Re: three locks and lock order reversal?
Message-ID:  <20040206020616.12702.qmail@web60606.mail.yahoo.com>
In-Reply-To: <200402051418.54247.jhb@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
> If one thread does A then B, another thread does B then C, and a third thread
> does C then A you can deadlock if each thread gets the first lock and blocks 
> on the second lock.  Thread 1 wants B and holds A, thread 2 holds B and wants
> C, and thread 3 wants A and holds C.  Thread 3 will not giveup C until it 
> gets A.  Thread 1 holds A and won't give it up until it gets B.  Thread 2 
> holds B and won't give it up until it gets C which is held by thread 3.  
> Hence, deadlock.
> 
> -- 
> John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
> "Power Users Use the Power to Serve"  =  http://www.FreeBSD.org
>

Thank you for the explanation! I only thought of two threads. So this bring me
another question: if the machine only have 2 CPUs, does it mean that this kind
of LOR is safe, provided there is no other sleep lock between A and B, B and C,
C and A?

song

_________________________________________________________
Do You Yahoo!? 
完全免费的雅虎电邮,马上注册获赠额外60兆网络存储空间
http://cn.rd.yahoo.com/mail_cn/tag/?http://cn.mail.yahoo.com



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040206020616.12702.qmail>