tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Brian Goetz <>
Subject Re: Thread-safety
Date Sat, 27 Jan 2001 02:15:44 GMT

>The reputation of Bill Pugh is quite high - enough so that I would be
>nclined to take his statements on this subject as beyond challenge.

As well you should.  And many very smart people have signed his 
declaration, including Doug Lea.

>Upon careful reading of the link mentioned in this thread, I came across
>the following:
>    It will work for 32-bit primitive values
>    Although the double-checked locking idiom cannot be used for references
>    to objects, it can work for 32-bit primitive values (e.g., int's or
>    float's). Note that it does not work for long's or double's, since
>    unsynchronized reads/writes of 64-bit primitives are not guaranteed to
>    be atomic.

This statement is true, but very easy to misinterpret; be careful.  There 
have been many attempts to "fix" DCL by trying to exploit that; they all 

>Based on this, it would seem to me that the code snippet staring with "if
>(_jspx_inited == false) {" is safe.  Worst case, change _jspx_inited from
>boolean to int.

Seems that way, but its not.  You can't use this to make an end-run around 
the problem in the general case.  If jspx_init() creates any objects, 
you've gotta synchronize, plain and simple.  If jspx_init() calculates 
multiple primitive values, which can obtained through any other means than 
its return value, you've gotta synchronize.

Brian Goetz
Quiotix Corporation           Tel: 650-843-1300            Fax: 650-324-8032

View raw message