http://www.unidata.ucar.edu/software/netcdf-java/reference/faq.html#Multithreading
On 4/23/2013 7:38 PM, Hanns Holger Rutz wrote:
ah.... actually I was synchronising on the _variable_ and that is obviously not
sufficient. I corrected it now to synchronise on the _nc2.NetcdfFile_, and the
exception is gone at least now, so hopefully that does the isolation.
i'm still interested in some information regarding recommendations in
concurrent setups.
best, .h.h.
On 23 Apr 2013, at 18:32, Hanns Holger Rutz wrote:
hi there,
I'm having a question regarding thread safety and concurrency with the netcdf
java library.
basically i'm running a thread that scans a large file to calculate overall
statistics, and then when i try to plot that file in the meantime, i get
spurious errors like this:
Exception in thread "AWT-EventQueue-0"
java.lang.ArrayIndexOutOfBoundsException: -41846
at ucar.unidata.io.RandomAccessFile.read(RandomAccessFile.java:538)
at ucar.unidata.io.RandomAccessFile.readInt(RandomAccessFile.java:1134)
at ucar.unidata.io.RandomAccessFile.readLong(RandomAccessFile.java:1218)
at
ucar.unidata.io.RandomAccessFile.readDouble(RandomAccessFile.java:1325)
at ucar.nc2.iosp.IospHelper.readData(IospHelper.java:153)
at ucar.nc2.iosp.IospHelper.readDataFill(IospHelper.java:79)
at ucar.nc2.iosp.netcdf3.N3raf.readData(N3raf.java:63)
at ucar.nc2.iosp.netcdf3.N3iosp.readData(N3iosp.java:453)
at ucar.nc2.NetcdfFile.readData(NetcdfFile.java:1941)
at ucar.nc2.Variable.reallyRead(Variable.java:859)
at ucar.nc2.Variable._read(Variable.java:831)
at ucar.nc2.Variable.read(Variable.java:709)
at at.iem.sysson.Implicits$SyRichVariable.readSafe(Implicits.scala:111)
The `readSafe` in the last line actually uses a `synchronized` lock on the
file, so at least I'm making sure that no two threads are calling
`Variable.read` at the same time. But still it seems that something is messed
up.
So are there any pitfalls in this approach that could result in mutable state
being mixed up when using the file from multiple threads? Is there a technique
to ensure consistency (other than locking calls to Variable.read)?
I have a vague feeling that the problem might be that read doesn't actually
read the whole data, but ma2.Array uses some cache and runs actual I/O after
Variable.read has completed. I'm using iterators on the array with
`getNextFloat` and `getNextDouble`. Do I need to isolate them as well somehow?
Thanks a lot!
Best regards,
Hanns Holger Rutz
----
University of Music and Performing Arts – KUG
Institute of Electronic Music and Acoustics – IEM
Inffeldgasse 10/III
8010 Graz
Austria
_______________________________________________
netcdf-java mailing list
netcdf-java@xxxxxxxxxxxxxxxx
For list information or to unsubscribe, visit:
http://www.unidata.ucar.edu/mailing_lists/
----
University of Music and Performing Arts – KUG
Institute of Electronic Music and Acoustics – IEM
Inffeldgasse 10/III
8010 Graz
Austria
_______________________________________________
netcdf-java mailing list
netcdf-java@xxxxxxxxxxxxxxxx
For list information or to unsubscribe, visit:
http://www.unidata.ucar.edu/mailing_lists/