使用pthread_mutex增加数字

时间:2014-05-15 08:12:57

标签: pthreads mutex

我想使用thread增加一个数字。我有这个代码:

#include <pthread.h>
int S;
pthread_t t;
suma(){
  S++;
}
main(){
int i;
for(i=1;i<=20000;i++)
  pthread_create(&t,NULL,suma,NULL)
pthread_join(s,NULL);
printf("%d",S);
}

结果不会是20000(我知道原因)。我试过使用互斥线程,但我不确定我是否正确使用这个线程:

使用互斥锁的代码:

#include <pthread.h>
int S;
pthread_t t;
pthread_mutex_t lock=PTHREAD_MUTEX_INITIALIZER;
suma(){
  pthread_mutex_lock(&lock);
  S++;
  pthread_mutex_unlock(&lock);
}
main(){
int i;
for(i=1;i<=20000;i++)
  pthread_create(&t,NULL,suma,NULL)
pthread_join(s,NULL);
printf("%d",S);
}

我认为我需要在suma()中进行一些测试才能正常工作,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

您需要加入您创建的每个主题,因此您无法重复使用相同的pthread_t变量,而20000个主题可能过多。

#include <pthread.h>
#include <stdio.h>

int S = 0;
pthread_t t[201];
pthread_mutex_t lock=PTHREAD_MUTEX_INITIALIZER;

suma(){
    pthread_mutex_lock(&lock);
    S++;
    pthread_mutex_unlock(&lock);
}

int main(){
    int i;
    for(i=1;i<=200;i++)
        pthread_create(&t[i],NULL,suma,NULL);

    for(i=1;i<=200;i++)
        pthread_join(t[i],NULL);
    printf("%d",S);
}