我有一个计算阶乘的程序,但它的工作原理不正确。
我应该使用Mutex
更改它,但我不明白这个功能。
// POSIX Threads, example #5-1
#include <iostream>
#include <pthread.h>
using namespace std;
void* fact(void *data) {
int arg = *(int*)data;
cout << arg << endl;
static int res = 1;
for(int i=2; i<=arg; i++) res*=i;
return &res;
}
int main() {
const int NMAX = 5;
pthread_t tid[NMAX];
int n, i;
for(i=0; i<NMAX; i++) {
n = i + 1;
pthread_create(&tid[i], NULL, fact, &n);
}
for(i=0; i<NMAX; i++) {
int* p_res;
pthread_join(tid[i], (void**)&p_res);
cout << "n = " << i+1
<< ", res = " << *p_res << endl;
}
return 0;
}
我可以使用loop
更改它。
#include <iostream>
#include <pthread.h>
using namespace std;
void* fact(void *data) {
int arg = *(int*)data;
int res = 1;
for(int i = 2; i <= arg; i++) res *= i;
*(int*)data = res;
return NULL;
}
int main() {
const int NMAX = 5;
pthread_t tid[NMAX];
int i, data[NMAX];
for(i = 0; i < NMAX; i++) {
data[i] = i + 1;
pthread_create(&tid[i], NULL, fact, &data[i]);
}
for(i = 0; i < NMAX; i++) {
pthread_join(tid[i], NULL);
cout << "n = " << i + 1 << ", res = " << data[i] << endl;
}
return 0;
}
但我不知道使用Mutex
。我不知道使用它的方法,也无法理解它是如何工作的。