我想使用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()中进行一些测试才能正常工作,但我不知道该怎么做。
答案 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);
}