En el sistema Linux, problema de paso de parámetros en la programación multiproceso pthread en lenguaje C
¿Los tres hilos usan la misma información?
El código Info_t *info?= (Info_t *)malloc(sizeof(Info_t)); >
p>
pthread_create(amp; threads[i], NULL, calMatrix, (void *)info); Los tres hilos usan el mismo
Cambié tu código: # include); ?lt;stdio.hgt;
#include?lt;stdlib.hgt;
#include?lt;pthread.hgt;
int?mtc [ 3]?=?{?0?};?//?result?matrix
typedef?struct
{
int?prank;
p>
int?*mta;?
int?*mtb;
}Info_t;
void*?calMatrix(void *?arg)
{
int?i;
Info_t?*info?=?(Info_t?*)arg;
int?broma ?=?info-gt;broma;
fprintf(stdout, "calMatrix?:?broma?is?d\n",broma);
for( i?=? 0;?i?lt;?3;?i )
mtc[broma]? =?info-gt;mta[i]?*?info-gt;mtb[i] ;
return?NULL;
}
int?main(int?argc, char?**argv)
{
int?i,j,k?=?0;
int?mta[3][3];
int?mtb[3]?= ?{?1 ?};
Info_t?*info?=?(Info_t?*)malloc(tamañode(Info_t)*3);
for(i?=?0 ;?i? lt;?3;?i )
for(j?=?0;?j?lt;?3;?j )
mta[i][ j]?= ?k ;
/*?3?threads?*/
pthread_t?*threads?=?(pthread_t?*)malloc(sizeof(pthread_t)*3 );
p>fprintf(stdout, "\n"); fflush(stdout);
for(i?=?0;?i?lt;?3;? i)
{
info[i].broma?=?i;
info[i].mta?=?mta[i];
info[i].mtb?=?mtb;
pthread_create(amp; threads[i], NULL, calMatrix, (void?*)(amp; info[i]) );
}
for(i?=?0;?i?lt;?3;?i)
pthread_join(threads[i], NULL);
fimprimir
f(stdout, "\n====?la?matriz?resultado?====\n\n");
fflush(stdout);
for( i?=?0;?i?lt;?3;?i )
{
fprintf(stdout, "mtc[d]?=?d\n",i , mtc[i]);
fflush(stdout);
}
return?0;
}
Olvidé el cálculo de la matriz, ejecútelo y vea si el resultado es correcto