Всем привет! Уже долго мучаюсь с задачей. Суть ее проста: 3 потока, один читает из файла в буфер, другой в буфере меняет текст, третий записывает из буфера в этот же файл. У меня почему то не отрабатывает конец файла, то есть программа все делает правильно, но потом уходит в бесконечный цикл.
// openmpfile.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <omp.h>
#include <iostream>
#include <fstream>
#include <windows.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
fstream file("text.txt", ios::in | ios::out);
const int length = 10;
int pos = 0;
char* buffer = new char[length];
omp_lock_t lock;
omp_init_lock(&lock);
bool flagBuffer = false;
bool flagWriter = false;
#pragma omp parallel sections num_threads(3) shared(size,flagBuffer,length,flagWriter,buffer, pos, file)
{
#pragma omp section
{
while (!file.eof())
{
omp_set_lock(&lock);
if (flagBuffer == false && flagWriter == false)
{
file.clear();
pos = (int)file.tellg();
file.read(buffer, length);
flagBuffer = true;
file.clear();
file.seekg(pos);
}
omp_unset_lock(&lock);
}
}
#pragma omp section
{
while (!file.eof())
{
omp_set_lock(&lock);
if (flagBuffer) {
cout << "buffer" << endl;
for (int i = 0; i < length; i++)
{
buffer[i] = toupper(buffer[i]);
cout << buffer[i] << " ";
}
cout << endl;
flagBuffer = false;
flagWriter = true;
}
omp_unset_lock(&lock);
}
}
#pragma omp section
{
while (!file.eof())
{
omp_set_lock(&lock);
if (flagWriter) {
file.write(buffer, length);
flagWriter = false;
}
omp_unset_lock(&lock);
}
}
}
file.close();
return 0;
}