使用Mutex C ++更改计数阶乘的程序

时间:2016-05-12 22:17:16

标签: c++ mutex

我有一个计算阶乘的程序,但它的工作原理不正确。 我应该使用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。我不知道使用它的方法,也无法理解它是如何工作的。

0 个答案:

没有答案