Comment puis-je avoir plusieurs threads en C, travaillant sur le même pour la boucle d'un tableau à deux dimensions?

j'ai un programme en C.

J'ai créé 3 fils avec pthread_create et j'ai créé un mutex
pour verrouiller/déverrouiller les régions critiques.

La 3e argument de pthread_create est un pointeur vers une fonction que le thread s'exécuter.

Dans les exemples que j'ai trouvé dans le Web, cette fonction est toujours très simple par exemple, imprime l'id de thread ou imprime un message.

Ce qui se passe lorsque la fonction de thread exécute contient un pour la boucle?

Cause dans mon programme, je voudrais que chaque un des threads de travailler avec un tableau à deux dimensions.

Chaque thread doit trouver la somme d'une ligne d'un tableau à deux dimensions.
par exemple,

Thread1 doit calculer la somme de la première ligne du tableau en 2 dimensions

Thread2 doit calculer la somme de la deuxième ligne

Thread1 doit calculer la somme de la 3e ligne

Thread3 doit calculer la somme de la 3e ligne

Je ne se soucient pas de l'ordre des fils, mais j'ai besoin de tous les
filetage pour choisir l'une des lignes.

J'ai le code suivant qui sommes deux cellules dans le tableau à deux dimensions.

Le programme:

  1. crée NTHREADS

     for(i=0; i < NTHREADS; i++)
        {
           pthread_create( &thread_id[i], NULL, CalculateSum, NULL );
        }
  2. Chaque thread attend les autres pour finir

    for(j=0; j < NTHREADS; j++)
       {
          pthread_join( thread_id[j], NULL);
       }
  3. la fonction que chaque thread exécute mais pour UNE ligne de la matrice et PAS à l'ENSEMBLE du tableau est

    void *CalculateSum(void *dummyPtr)
    {
       pthread_mutex_lock( &mutex1 );
    
     int i,j,sum = 0;
    
      for( i = 0; i <= N-1; i++) {
            for( j = 0; j <= M-1; j++) {
                    sum = dimensional_array[i][j] + dimensional_array[i][j];
            }
             printf(" Sum = %d\n", sum);
            }
    
       counter++;
    
       pthread_mutex_unlock( &mutex1 );
    }

L'ensemble du programme est comme suit:
Le programme n'a aucune erreur de compilation.

Afin de l'exécuter, vous ne ferez: gcc-pthread programme.c

    //program.c
#include <stdio.h>
#include <pthread.h>
#define NTHREADS 3
void *CalculateSum(void *);
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
int  counter = 0;
#define N 10
#define M 10
int dimensional_array[N][M];
main()
{
pthread_t thread_id[NTHREADS];
int i, j;
for (i = 0; i <= N - 1; i++ )
for( j = 0; j <= M - 1; j++)
dimensional_array[i][j] = i;
for(i=0; i < NTHREADS; i++)
{
pthread_create( &thread_id[i], NULL, CalculateSum, NULL );
}
for(j=0; j < NTHREADS; j++)
{
pthread_join( thread_id[j], NULL);
}
printf("Final counter value: %d\n", counter);
//print ARRAY
for (i = 0; i <= N-1; i++ ) {
for( j = 0; j <= M-1; j++)
printf("%d\t",dimensional_array[i][j]);
printf("\n");
}
}
//Calculate
void *CalculateSum(void *dummyPtr)
{
pthread_mutex_lock( &mutex1 );
int i,j,sum = 0;
for( i = 0; i <= N-1; i++) {
for( j = 0; j <= M-1; j++) {
sum = dimensional_array[i][j] + dimensional_array[i][j];
}
printf(" Sum = %d\n", sum);
}
counter++;
pthread_mutex_unlock( &mutex1 );
}

Donc, je voudrais que chaque thread pour trouver la somme d'une ligne, mais je suis confus, je ne sais pas
comment le faire.

Dans mon programme à chaque fois qu'un thread appelle la fonction Calculate, tous à la somme des lignes sont calculées et pas seulement une

[Attention:Pour des raisons de simplicité, je somme le premier élément avec c'est propre,le point est de comprendre
comment ces fils peuvent tous prendre place dans cette boucle]

Je serais heureux si quelqu'un pouvait m'aider

Merci d'avance

Changement total = dimensional_array[i][j] + dimensional_array[i][j]; somme += dimensional_array[i][j];
Aussi, dans cette boucle ajoutez somme = 0 pour( i = 0; i <= N-1; i++) {
Quel est le point de runnung plusieurs threads s'ils s'exécutent à l'intérieur d'une section critique, essentiellement, se réduisant à un seul thread d'exécution?
Ouais, je suis confus, c'est un exercice que j'ai à faire et nous allons utiliser plusieurs threads (et pas seulement un seul) de l'accès à une seule ligne du tableau en 2 dimensions, mais je ne sais pas comment faire

OriginalL'auteur programmer | 2012-11-16