Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <pthread.h>
- #define NUM_THREADS 2
- #define size_matriz 3
- struct parametros {
- int id;
- int fila;
- int columna;
- int matriz_ini[size_matriz][size_matriz];
- int matriz_fin[size_matriz][size_matriz];
- int matriz_res[size_matriz][size_matriz];
- };
- void inicializarMatriz(int m[size_matriz][size_matriz]) {
- for(int i = 0; i < size_matriz; i++){
- for(int j = 0; j < size_matriz; j++){
- m[i][j] = random()*100;
- }
- }
- }
- void * multiplicarMatriz(void *arg) {
- struct parametros *p;
- p = (struct parametros *)arg;
- p->matriz_res[p->fila][p->columna]= 0;
- for(int i = 0; i < size_matriz; i++){
- p->matriz_res[p->fila][p->columna]+= p->matriz_ini[p->fila][i]*p->matriz_fin[i][p->columna];
- }
- }
- void imprimirResultadoMatriz(){
- struct parametros *p;
- printf("matriz_ini\n");
- for(int i = 0; i < size_matriz; i++){
- for(int j = 0; j < size_matriz; j++){
- printf("%d-", p->matriz_ini[i][j]);
- }
- }
- printf("matriz_fin\n");
- for(int i = 0; i < size_matriz; i++){
- for(int j = 0; j < size_matriz; j++){
- printf("%d-", p->matriz_fin[i][j]);
- }
- }
- printf("matriz_res\n");
- for(int i = 0; i < size_matriz; i++){
- for(int j = 0; j < size_matriz; j++){
- printf("%d-", p->matriz_res[i][j]);
- }
- }
- }
- void recorridoMultiplicacionMatriz(){
- struct parametros d;
- struct parametros *p = &d;
- // struct parametros *p;
- pthread_t threads[NUM_THREADS];
- int rc;
- long t;
- void *status;
- p->id = 1;
- inicializarMatriz(p->matriz_ini);
- inicializarMatriz(p->matriz_fin);
- for(t=0;t<NUM_THREADS; t++){
- printf("En main: creando el hilo %ld\n", t);
- for(int fila = 0; fila < size_matriz; fila++){
- for(int columna = 0; columna < size_matriz; columna++){
- // printf("lel");
- p->fila = fila;
- // printf("lol");
- p->columna = columna;
- // printf("lal");
- rc = pthread_create(&threads[t],NULL,multiplicarMatriz,(void *)&p);
- // printf("mmm");
- // if(rc){
- // printf("ERROR; El código que pthread_create() retorno es %d\n",rc);
- // exit(-1);
- // }
- }
- }
- }
- for(t=0; t<NUM_THREADS; t++){
- rc = pthread_join(threads[t], &status);
- if(rc){
- printf("ERROR; El codigo que pthread_join retorna es %d\n", rc);
- exit(-1);
- }
- printf("Join completado con hilo %ld con estado %ld\n",t,(long)status);
- }
- printf("Programa terminado. Saliendo ...\n");
- pthread_exit(NULL);
- }
- int main(int argc, char *argv[]) {
- //este programa me debe permitir multiplicar varias matrices en diferente scores
- recorridoMultiplicacionMatriz();
- imprimirResultadoMatriz();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement