home *** CD-ROM | disk | FTP | other *** search
/ ftp.disi.unige.it / 2015-02-11.ftp.disi.unige.it.tar / ftp.disi.unige.it / pub / .person / GianuzziV / SO1 / ThreadMoltip.c < prev    next >
C/C++ Source or Header  |  2005-03-20  |  2KB  |  77 lines

  1. /**********************************************
  2. *   ThreadMoltip.c                           *
  3. * gcc -D_REENTRANT ThreadMoltip.c -lpthread  *
  4. *                                            *
  5. * sono generati dei thread per effettuare    *
  6. * una moltiplicazione di matrici             *
  7. *                                            *
  8. **********************************************/
  9.  
  10. #include <stdio.h>
  11. #include <pthread.h>
  12.  
  13. #define MATSIZE 4
  14.  
  15. void* matMult( void* );
  16.  
  17. int mat2[MATSIZE][MATSIZE] =
  18.    { { 1, 2, 3, 4 },
  19.      { 4, 5, 6, 7 },
  20.      { 7, 8, 9, 10 },
  21.      { 10, 11, 12, 13 } };
  22. int mat1[MATSIZE][MATSIZE] =
  23.    { { 9, 8, 7, 6 },
  24.      { 6, 5, 4, 3 },
  25.      { 3, 2, 1, 0 },
  26.      { 0, -1, -2, -3 } };
  27. int result[MATSIZE][MATSIZE];
  28.  
  29. int main( void )
  30. {
  31.   pthread_t thr[MATSIZE];
  32.   
  33.   int i, j;
  34.  
  35.   for( i = 0; i < MATSIZE; ++i ) {
  36.     pthread_create( &thr[i], NULL, matMult, (void*)i );
  37.   }
  38.  
  39.   for( i = 0; i < MATSIZE; ++i ) {
  40.     pthread_join( thr[i], NULL );
  41.   }
  42.  
  43.   for( i = 0; i < MATSIZE; ++i ) {
  44.     printf( "| " );
  45.     for( j = 0; j < MATSIZE; ++j ) {
  46.       printf( "%3d ", mat1[i][j] );
  47.     }
  48.     printf( "| %c | ", (i==MATSIZE/2 ? 'x' : ' ') );
  49.     for( j = 0; j < MATSIZE; ++j ) {
  50.       printf( "%3d ", mat2[i][j] );
  51.     }
  52.     printf( "| %c | ", (i==MATSIZE/2 ? '=' : ' ' ) );
  53.     for( j = 0; j < MATSIZE; ++j ) {
  54.       printf( "%3d ", result[i][j] );
  55.     }
  56.     printf( "|\n" );
  57.   }
  58.  
  59.   return 0;
  60. }
  61.  
  62.  
  63. void* matMult( void* col )
  64. {
  65.   int i, j;
  66.   int val;
  67.  
  68.   for( i = 0; i < MATSIZE; ++i ) {
  69.     result[i][(int)col] = 0;
  70.     for( j = 0; j < MATSIZE; ++j ) {
  71.       result[i][(int)col] += mat1[i][j] * mat2[j][(int)col];
  72.     }
  73.   }
  74.   return NULL;
  75. }
  76.   
  77.