Witam, potrzebuje pomocy a mianowicie temat zadania :
W programie jest kilka współdzielonych strumieni zapisu do plików (plik1.txt, plik2.txt itd. - na początku pliki są puste). Dostęp jest przyznawany dla każdego strumienia osobno. Wątki chcą pisać do plików, ale wątek może pisać tylko i wyłącznie do dwóch plików jednocześnie. Do plików program dopisuje 100 razy swój numer, bez usuwania wcześniejszej treści pliku. Napisz program, który bez zakleszczania i zagłodzenia:
a) posiada 3 wątki i 2 strumienie plików
b) 5 wątków i 5 strumieni plików(bez mutexów)
Program a napisałem, ale nie wiem jak ugryźć program b, dziękuje za pomoc
#include "stdafx.h"
#include <pthread.h>
#include <iostream>
#include <fstream>
const int NUM_THREADS=3;
bool flag = false;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
using namespace std;
void *fun(void *threadid){
long tid;
tid = (long) threadid;
for (int j=0; j<10; j++){
pthread_mutex_lock(&mutex);
fstream plik1;
plik1.open("file1.txt", ios::app);
if( plik1.good() == true){
for (int i=0; i<100; i++)
plik1 << (int)tid;
}
plik1.close();
pthread_mutex_unlock(&mutex);
}
for (int j=0; j<10; j++){
pthread_mutex_lock(&mutex2);
fstream plik2;
plik2.open("file2.txt", ios::app);
if( plik2.good() == true){
for (int i=0; i<100; i++)
plik2 << (int)tid;
}
plik2.close();
pthread_mutex_unlock(&mutex2);
}
pthread_exit(NULL);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0; t<NUM_THREADS; t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, fun, (void*) t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
}
}
system("pause");
pthread_exit(NULL);
return 0;
}