我有一个多线程应用程序(OpenMP),其中每个线程都进行一些计算并找到_pre的值。 然后,打开一个名称为“ file_pre.txt”的文件,并写入从索引_sub和_end开始的字符串部分。 具有相同文件名的两个线程不会打开该文件进行写入。 因此,我在关键部分编写了写作部分,但是它很昂贵,因为我希望多个具有不同文件名的线程能够同时写入各个文件,并且仅当它们在_pre中具有相同的值(相同的文件名)时才将它们锁定(更新线程可以等待其他线程完成)。
有人可以解决吗?
密码部分:
ofstream outfile;
#pragma omp parallel for num_threads(8) schedule(static) private(it) shared(array)
for (it = 0; it < array.size(); ++it)
{
int _pre, _sub = 0, _end;
if(---)
{
_pre = xyz;
_end = abc;
ostringstream strCounter;
strCounter << _pre;
string result = "file" + strCounter.str() + ".txt";
#pragma omp critical(outfile)
{
outfile.open(result.c_str(), std::ios_base::app);
if (outfile.is_open())
{
for (int count = _sub; count < _end; count++)
{
outfile << buffer[count];
}
outfile << "\n";
outfile.close();
} else cout << "Unable to open file";
_sub = _abc;
}
}
else
{
_pre = _xyz_;
_end = _abc_;
ostringstream strCounter;
strCounter << _pre;
string result = "file" + strCounter.str() + ".txt";
#pragma omp critical(outfile)
{
outfile.open(result.c_str(), std::ios_base::app);
if (outfile.is_open())
{
for (int count = _sub; count < _end; count++)
{
outfile << buffer[count];
}
outfile << "\n";
outfile.close();
} else cout << "Unable to open file";
_sub = _abc;
}
}
}