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 >
Wrap
C/C++ Source or Header
|
2005-03-20
|
2KB
|
77 lines
/**********************************************
* ThreadMoltip.c *
* gcc -D_REENTRANT ThreadMoltip.c -lpthread *
* *
* sono generati dei thread per effettuare *
* una moltiplicazione di matrici *
* *
**********************************************/
#include <stdio.h>
#include <pthread.h>
#define MATSIZE 4
void* matMult( void* );
int mat2[MATSIZE][MATSIZE] =
{ { 1, 2, 3, 4 },
{ 4, 5, 6, 7 },
{ 7, 8, 9, 10 },
{ 10, 11, 12, 13 } };
int mat1[MATSIZE][MATSIZE] =
{ { 9, 8, 7, 6 },
{ 6, 5, 4, 3 },
{ 3, 2, 1, 0 },
{ 0, -1, -2, -3 } };
int result[MATSIZE][MATSIZE];
int main( void )
{
pthread_t thr[MATSIZE];
int i, j;
for( i = 0; i < MATSIZE; ++i ) {
pthread_create( &thr[i], NULL, matMult, (void*)i );
}
for( i = 0; i < MATSIZE; ++i ) {
pthread_join( thr[i], NULL );
}
for( i = 0; i < MATSIZE; ++i ) {
printf( "| " );
for( j = 0; j < MATSIZE; ++j ) {
printf( "%3d ", mat1[i][j] );
}
printf( "| %c | ", (i==MATSIZE/2 ? 'x' : ' ') );
for( j = 0; j < MATSIZE; ++j ) {
printf( "%3d ", mat2[i][j] );
}
printf( "| %c | ", (i==MATSIZE/2 ? '=' : ' ' ) );
for( j = 0; j < MATSIZE; ++j ) {
printf( "%3d ", result[i][j] );
}
printf( "|\n" );
}
return 0;
}
void* matMult( void* col )
{
int i, j;
int val;
for( i = 0; i < MATSIZE; ++i ) {
result[i][(int)col] = 0;
for( j = 0; j < MATSIZE; ++j ) {
result[i][(int)col] += mat1[i][j] * mat2[j][(int)col];
}
}
return NULL;
}