next up previous contents
Next: Derived Datatype vs Object Up: Language Binding Previous: Array Count Arguments.   Contents

Concurrent Access to Arrays.

In JNI-based wrapper implementations it may be necessary to impose some non-interference rules for concurrent read and write operations on arrays. When an array is passed to an MPI method such as a send or receive operation, the wrapper code will probably extract a pointer to the contents of the array using a JNI Get...ArrayElements routine. If the garbage collector does not support ``pinning'' (temporarily disabling run-time relocation of data for specific arrays--see [#!GORDON!#] for more discussion), the pointer returned by this Get function may be to a temporary copy of the elements. The copy will be written back to the true Java array when a subsequent call to Release...ArrayElements is made. If two operations involving the same array are active concurrently, this copy-back may result in failure to save modifications made by one or more of the concurrent calls.

Such an implementation may have to enforce a safety rule such as: when several MPI send or receive (etc) operations are active concurrently, if any one of those operations writes to a particular array, none of the other operations must read or write any portion of that array.

If the garbage collector supports pinning, this problem does not arise.


next up previous contents
Next: Derived Datatype vs Object Up: Language Binding Previous: Array Count Arguments.   Contents
Bryan Carpenter 2004-06-09