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;
}