POSIX スレッドを使用して C で並列アルゴリズムをプログラムする方法を学ぼうとしています。私の環境は、gcc 4 を搭載した Mac OS X 10.5.5 です。
コンパイル:
gcc -Wall -D_REENTRANT -lpthread source.c -o test.o
したがって、私の問題は、これをUbuntu 9.04ボックスでコンパイルすると、スレッド順にスムーズに実行され、Macではミューテックスが機能しないように見え、スレッドは共有情報を取得するのを待ちません。
マック:
#1
#0
#2
#5
#3
#4
Ubuntu
#0
#1
#2
#3
#4
#5
何か案は?
ソースコードの下に従ってください:
#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);
}