[Mono-devel-list] Thread safety of readonly data members?
Gonzalo Paniagua Javier
gonzalo at ximian.com
Wed Feb 18 11:18:30 EST 2004
El mié, 18-02-2004 a las 17:06, gabor escribió:
> On Wed, 2004-02-18 at 12:49, Jonathan Pryor wrote:
> > Moving on to Mono, one major problem is that the CLI standard, as
> > currently specified, uses effectively the same memory consistency model
> > as Java. Meaning, C++ techniques such as double-checked locking ARE NOT
> > VALID:
> >
> > private static Class1 foo;
> >
> > public static Foo {
> > get {
> > // This will likely work on most platforms, such
> > // as x86, but it is NOT guaranteed to work on
> > // all potential hardware platforms.
> > if (foo == null) {
> > lock (typeof(Something)) {
> > if (foo == null)
> > foo = new Class1();
> > }
> > }
> > }
> > }
> >
> > In C++, you could use code similar to the above, and you WOULD NOT need
> > to lock both the class constructor and the accessor methods, as the
> > calling code ensures that the class has properly constructed before
> > invoking any member functions.
> >
> > The problem is that double-checked locking isn't really portable in
> > .NET, so you either need to (a) always lock the code that will construct
> > the object, or (b) use the static loader lock, described below.
>
> hmmm.. could you explain one more time why is that code wrong?
> for example can you give me an example when it goes wrong?
There's an explanation in
http://research.microsoft.com/~birrell/papers/ThreadsCSharp.pdf (which
is listed in http://www.go-mono.com/papers.html).
-Gonzalo
More information about the Mono-devel-list
mailing list