Pthreads dans Mac OS X - Mutex problème

Je suis en train d'apprendre à programmer des algorithmes parallèles en C en utilisant les threads POSIX. Mon environnement est un Mac OS X 10.5.5 avec gcc 4.

De la compilation:

gcc -Wall -D_REENTRANT -lpthread source.c -o test.o

Donc, mon problème est que si je le compiler dans un Ubuntu 9.04 boîte, il fonctionne bien dans le fil de commande, sur Mac ressemble mutex ne fonctionne pas et que les threads ne pas attendre pour obtenir de l'information partagée.

Mac:

#1
#0
#2
#5
#3
#4

ubuntu

#0
#1
#2
#3
#4
#5

Des idées?

Suivez ci-dessous le code source:

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

#define NUM_THREADS 6
pthread_mutex_t mutexsum;
pthread_t threads[NUM_THREADS];
long Sum;

void *SumThreads(void *threadid){
    int tmp;
    int i,x[10],y[10];

    //Para cada x e y do vetor, jogamos o valor de i, só para meio didáticos
    for (i=0; i<10 ; i++){
        x[i] = i;
        y[i] = i;
    }


    tmp = Sum;
     for (i=0; i<10 ; i++){
         tmp += (x[i] * y[i]);
     }

       pthread_mutex_lock (&mutexsum);
       Sum += tmp;
       printf("Im thread #%ld sum until now is: %ld\n",threadid,Sum);
       pthread_mutex_unlock (&mutexsum);
       return 0;
}


int main(int argc, char *argv[]){
    int i;
    Sum = 0;

    pthread_mutex_init(&mutexsum, NULL);

    for(i=0; i<NUM_THREADS; i++){
        pthread_create(&threads[i], NULL, SumThreads, (void *)i);
    }

    pthread_exit(NULL);
}
Il est généralement considéré comme poli de donner de la rétroaction sur les réponses que vous avez été donné.

OriginalL'auteur rafaelxy | 2009-09-11