Здравствуйте! При работе с мьютексом c++ возникло:
Необработанное исключение по адресу 0x582610D6 (msvcp110d.dll) в ConsoleSwap.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000000.
Код:
#include "stdafx.h"
#include <iostream>
#include <mutex>
#include <thread>
#include <chrono>
#include <fstream>
using namespace std;
using namespace std::chrono;
//mutex t;
recursive_mutex t;
fstream workFile, vectorFile;
ofstream swapFile, resultFile;
const int maxN = 20000;
int n, globalCounter;
int vector[maxN];
long resultVector[maxN];
void generateFile(int n)
{
/* initialize random seed: */
srand(time(NULL));
workFile.open("D:\Универ\Системка 2 семестр\ConsoleSwap\ConsoleSwap\workFile.txt");
vectorFile.open("D:\Универ\Системка 2 семестр\ConsoleSwap\ConsoleSwap\vectorFile.txt");
if (workFile.is_open())
{
workFile << n << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
int x = rand() % 89 + 10;
workFile << x << " ";
}
workFile << endl;
cout << i << endl;
}
workFile.close();
}
else cout << "Unable to open workFile";
if (vectorFile.is_open())
{
for (int i = 0; i < n; i++)
{
int x = rand() % 89 + 10;
vectorFile << x << " ";
cout << i << endl;
}
vectorFile.close();
}
else cout << "Unable to open vectorFile";
}
void writeToSwapFile(int line[])
{
swapFile.open("swapFile.txt");
for (int i = 0; i < n; i++) swapFile << line[i] << " ";
swapFile.close();
}
long calculateElement(int line[])
{
long result = 0;
for (int i = 0; i < n; i++) result += line[i] * vector[i];
return result;
}
void performIteration()
{
int currentLine[maxN];
bool check= false;
int tempCounter;
while (!workFile.eof())
{
t.lock();
if (!workFile.eof())
{
for (int j = 0; j < n; j++) workFile >> currentLine[j];
check = true;
tempCounter = globalCounter++;
writeToSwapFile(currentLine);
}
t.unlock();
if (check) resultVector[tempCounter] = calculateElement(currentLine);
check = false;
cout << tempCounter << endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
workFile.open("D:\Универ\Системка 2 семестр\ConsoleSwap\ConsoleSwap\workFile.txt");
if (workFile.is_open())
{
workFile >> n;
globalCounter = 0;
}
else cout << "Unable to open workFile";
vectorFile.open("vectorFile.txt");
if (vectorFile.is_open())
{
for (int i = 0; i < n; i++) vectorFile >> vector[i];
vectorFile.close();
}
else cout << "Unable to open workFile";
const int threadCount = 4;
thread *threadArray[threadCount];
for (int i = 0; i < threadCount; i++)
threadArray[i] = new thread(performIteration);
long time1 = clock();
for (int i = 0; i < threadCount; i++)
threadArray[i]->join();
long time2 = clock();
workFile.close();
resultFile.open("D:\Универ\Системка 2 семестр\ConsoleSwap\ConsoleSwap\resultFile.txt");
for (int i = 0; i < n; i++) resultFile << resultVector[i] << " ";
resultFile.close();
cout << "Multiplication done! It took me " << (double) (time2 - time1) / (1000 * 1000) << " seconds!";
// generateFile(17000);
system("pause");
return 0;
}