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
y el número de intervalos
se enviarán
a través del manejador al programa.
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