Различные объекты ifstream используются в разных потоках для чтения разных файлов, а затем удаляются. При удалении файла иногда возникает нарушение общего ресурса. Это нормально работает на Linux, но есть проблема с Windows.
Представление с монитором процесса показывает, что в read () есть CloseFile когда это нормально, но нет CloseFile (), когда возникает исключение.
минимальный воспроизводимый пример:
#include<thread>
#include<string>
#include<fstream>
#include<cstdlib>
#include<sstream>
#include<future>
#include<filesystem>
#include <iostream>
using namespace std;
using std::filesystem::remove;
const int tim = 1000;
string thrdid()
{
ostringstream os;
os << hex << this_thread::get_id();
return os.str();
}
void read(string id)
{
ifstream in(id);
string dat;
in >> dat;
}
void thrd()
{
for (unsigned int i = 0; i < tim; ++i)
{
const string id = thrdid();
system((".\\write " + id).c_str());
read(id);
remove(id);
}
}
int main()
{
thread t(thrd);
thrd();
t.join();
return 0;
}
код записи
ofstream out;
int main(int argc, char* argv[])
{
out.open(argv[1]);
out << "Some string" << endl;
return 0;
}