HDF5读取线程错误中的数据集

时间:2014-02-03 04:40:04

标签: c# multithreading hdf5

我编写了Server Application,它将从HDF5文件中提取的数据同时发送给许多客户端

有一个代码(在单独的线程中运行):

var _fileID = H5F.open("C:\\Temp\\MLS-Aura_L2GP-Temperature_v03-33-c01_2012d347.he5", H5F.OpenMode.ACC_RDONLY);
H5D.open(_fileID, "/HDFEOS/SWATHS/Temperature/Data Fields/Temperature");
var space = H5D.getSpace(dataset);
var size = H5S.getSimpleExtentDims(space);
float[,] SatData = new float[size[0], size[1]];
var wrapArray = new H5Array<float>(SatData);
var dataType = H5D.getType(dataset);
H5D.read(dataset, dataType, wrapArray);

如果我尝试在单独的线程“H5D.read(dataset,dataType,wrapArray)”中读取HDF5数据集;“ 有多个线程,我有一个错误:“无法将数据读取到数据集5000001,状态为-1”

有什么问题?

1 个答案:

答案 0 :(得分:0)

HDF5库应该以线程安全模式进行编译,以便在多线程环境中使用。

./configure --enable-threadsafe ... 

但是,此配置仅确保线程安全,而不保证线程并行性。实际上,当前的HDF5版本1.10通过非常简单的互斥保护实现了线程安全模式,因此实际上由多线程调用的每个HDF5操作都被序列化了。