An important point to keep in mind is that we shouldn't be defining a
memory model that we would like to program to. Rather, we have to define a
memory model for the millions of Java programmers who are rather
unsophisticated when it comes to concurrency.
I can imagine two approaches to that goal.
(a) One approach is to devise a model that will allow as many as possible
of their naive notions about concurrent programming to work, while still
being possible to implement the model on SMP's with weak memory models with
(b) The second approach is to draw a very simple, square box, and say: "You
must program in the box". We can completely describe the box in no more
than a few pages, and provide them with static and dynamic tools for
testing if they are in the box. One simple box is "Use must use
synchronization or volatile variables to communicate between threads".
The problem with (a) is that the acceptable idioms will have almost a
fractal-like boundary. It will be very hard to specify the boundary, and
very, very few people will be able to distinguish an idiom that guaranteed
to work and an idiom that isn't. It will be difficult or impossible to use
testing to find uses of broken idioms, because many of them will only arise
on SMP's weak memory models, and then only sporadically. Because of the
complexity of the boundary, it is unlikely that there will be any static or
dynamic tools that will be able to test whether you code uses only legal
idioms. It will be difficult to write compilers and/or other program
transformation tools and ensure that they do not move a program across the
The problem with (b) is that lots of existing code is outside any simple
box we might construct. We could probably provide some "outside the box"
guarantees for safety purposes (e.g., Strings are immutable).
JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel
This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:00:21 EDT