NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.
To learn about what's going on, see About the Archive Site.
Hi,I am using netcdf in a threaded C program. I found that when I use more than 1 thread an assert in POSIX I/O routine fails
posixio.c:376: px_rel: Assertion `pxp->bf_offset <= offset && offset < pxp->bf_offset + (off_t) pxp->bf_extent' failed.this lead me to the FAQ which explains that nstcdf is not thread safe. I have a few questions below about what is the best approach to use netcdf in a threaded program.
Here are some details about my use case. the files are in classic format (not hdf5). The access to the files is read only. Each file contains a number of time steps. in my code time steps are assigned to threads for processing in parallel. each thread may read and process a number of variables from a given time step before moving on to another time step. the threads are sharing the file handles, to avoid having to re-open the same file multiple times.
Do I need to lock every netcdf call ?when a thread will read a list of variables in a loop, is it better to have the lock outside the loop, or just around the read call ? Should file handles be local to a thread, or is sharing them more efficient ?
Thanks Burlen
netcdfgroup
archives: