This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
>To: address@hidden >From: "Masahiro Miiyaki" <address@hidden> >Subject: netCDF C++ - Why is static variable used in NcVar::put function? >Organization: WeatherNews Inc. >Keywords: 200502021156.j12BuUFh022284 netCDF C++ Hi Masahiro Miiyaki, > Inquiry: I am trying to be able to work the NetCDF library in multi > thread environment. > > I have been almost finished the modification that the C library can > work in multi thread. > > But I found the point which was harmful to multi thread environment in > the netcdf.cpp file. Line number 807, > > static long start[5] = {0, 0, 0, 0, 0}; > for (int j = 0; j < 5; j++) { > start[j] = the_cur[j]; > } > > Why is the static variable used in this macro? There is no good reason, it looks like a mistake. If you delete the "static" and the initialization to {0, 0, 0, 0, 0}, I think it will still work as intended: long start[5]; \ for (int j = 0; j < 5; j++) { \ start[j] = the_cur[j]; \ } \ Thanks for pointing out the error. Please let us know if this fix works. There may be other problems with trying to make the C library thread-safe, since there are several global data structures, e.g. the list of open netCDF files declared in libsrc/nc.c: /* list of open netcdf's */ static NC *NClist = NULL; Also, you should not expect to be able to do multiple concurrent writes on the same open file. I would be interested in whether you have success making it work for multiple threads. --Russ _____________________________________________________________________ Russ Rew UCAR Unidata Program address@hidden http://www.unidata.ucar.edu/staff/russ