Re: user manual code example race condition

Pascal Bourguignon <[email protected]>
Newsgroups gmane.editors.j.devel
Message-ID <F8D75D50-F8FB-4114-8AA6-5ED7A946CDF1__33402.014202305$1552317575$gmane$org@informatimago.com>

> On 11 Mar 2019, at 10:59, Mark Evenson <[email protected]> wrote:
> 
> 
> 
>> On Mar 11, 2019, at 06:38, dingd <[email protected]> wrote:
>> 
>> this is recommended in the manual, it contains a race condition.
>> 
>> Interpreter interpreter = Interpreter.getInstance ();
>> if ( interpreter == null ) {
>> 	interpreter = Interpreter.createInstance ();
>> }
>> 
>> getInstance and createInstance should be swapped.
> 
> Since both Interpreter.getInstance() and Interpreter.createInstance() are
> methods synchronized on the same object monitor, I don’t see that there is a
> race condition here.  Could you explain a little more about your reasoning
> and/or experience with the race condition?



Two threads could call getInstance and have interpreter=null.
Then both will call createInstance, thus two instances will be created.
If interpreter is a local binding as it appears in the code above, then it is what’s intended and all is good.
But if interpreter is a global binding and you expected interpreter to have a single instance, then it’s wrong.


-- 
__Pascal J. Bourguignon__
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.