![]() |
y usando comunicaciones bidireccionales usando manejadores
abiertos con open2
escriba una nueva versión distribuida del cálculo de
.
Una posible versión en C++ es la siguiente:
#include <iostream>
using namespace std;
int main(){
int id, numInt, numProc, i;
double suma;
cin >> id >> numInt >> numProc;
suma = 0;
for (i = id; i < numInt; i += numProc){
suma += (4 / ((1 + (((i + 0.5)/numInt)*((i + 0.5)/numInt)))));
}
suma = suma / numInt;
//Haciendo que cada uno dure distintos tiempos
//srand(time(NULL));
//int espera = 1+(int) (10.0*rand()/(RAND_MAX+1.0)) + id;
//sleep(espera);
cout.precision(10);
cout << suma << endl << flush;
}
El proceso padre enviará los datos de la tarea a los hijos y recibirá
los resultados usando los manejadores proveídos por open2.
El número de tareas
Use comunicaciones sin buffers y sin bloqueo.
Utilice IO::Select en el procesador 0
para determinar que canales están listos para
recibir. Perturbe artificialmente los tiempos
de espera de cada proceso con sleep
y observe que sucede.
Casiano Rodríguez León
