IIC2333 / foro-2019-1

Foro oficial del curso IIC2333 - Sistemas Operativos y Redes, semestre 2019-1.
2 stars 0 forks source link

Eficiencia de repartición de tareas. #59

Closed JulesGutierrez closed 5 years ago

JulesGutierrez commented 5 years ago

Hola, tengo una duda en cuanto a que se me recomienda con los threads. Mi idea es leer el archivo palabra por palabra, y así darle a cada thread una palabra. De esta manera tengo que usar una variable temp, y, para poder almacenarla posteriormente, la copio a una variable dentro del thread. Luego, la debo resetear para poder leer la proxima palabra. Uno de los problemas que tuve fue que tenía que esperar hasta que el thread terminase de copiar para poder borrar temp, por lo que usé un flag. Pero esto me parece muy ineficiente, ya que cada thread practicamente terminaría antes de empezar otra. Adjunto un pseudocodigo:

int thread_flag = 0;

while(hay_palabras){
...
temp = palabra();
...
thread_amount += 1;
threads = realloc(threads, thread_amount * sizeof(pthread_t));
status = pthread_create(&threads[thread_amount - 1], NULL, thread_work,
                              (void *)temp);
while(!thread_flag);
thread_flag = 0;
memset(temp, 0, strlen(temp));
}

luego en thread_work...

void *thread_work(void *temp){
  char word[255] = {0};
  strcpy(word, temp);
  thread_flag = 1;
...
}

Hice lo equivalente con locks, y me parece que no funcionaría, ya que el 'repartidor' podría acceder al lock antes de la thread trabajadora.

Geeermy commented 5 years ago

¡Hola!

¿Te parece una buena idea crear un thread por palabra? ¿Qué función cumpliría cada thread?

Piensa que quizás el trasfondo de tu solución no es eficiente, ya que no estás aprovechando el trabajo que puede hacer un único thread. En tu caso, creo que es mejor que adaptes el problema de forma que cada uno de estos agarre una porción del texto y no solo una palabra.

¡Éxito!