Есть мой вопрос:
У меня много файлов (более 1000) одного размера (несколько Мб). Я должен их прочитать и извлечь некоторую информацию. На этом этапе извлечения информации требуется некоторое время, поэтому я могу использовать (по крайней мере, надеюсь) на этот раз, чтобы прочитать другой файл. Я стараюсь:
#pragma omp parallel for
for (int i=0; i<FilesCount; i++)
{
myData Data;
#pragma omp critical
{
Data.ReadDataFromFile (FileNames[i]);
}
//Operate with the Data and extract some information
}
Это не работает, как я ожидаю. Я также попытался использовать:
#pragma omp ordered
и результат тот же - используется только один поток. Другие OpenMP
работают отлично. Может быть, проблема в том, что я использую fstream
для чтения?
В чем проблема с этим и как это сделать правильно?
Все в блоке, отмеченном
#pragma omp critical
будет выполняться только одним потоком за раз. Все остальные потоки должны ждать, пока текущий поток не покинет этот блок.