【发布时间】:2019-12-29 14:39:26
【问题描述】:
我是 c 上 pthreads 的新手,所以我只是想用两个线程做一些基本程序,将整数递增直到等于 10000,然后每个线程写入它增加整数的时间,以及principale 线程写入最终结果,在我的输出中最终结果很好(始终等于 10000)但是每个线程的增量时间是错误的,有人可以向我解释为什么会这样吗?
我的代码:
//Threads in C
/* Includes */
#include <unistd.h> /* Symbolic Constants */
#include <sys/types.h> /* Primitive System Data Types */
#include <errno.h> /* Errors */
#include <stdio.h> /* Input/Output */
#include <stdlib.h> /* General Utilities */
#include <pthread.h> /* POSIX Threads */
#include <string.h> /* String handling */
void *T1 (void * par){
int * cp = (int*)(par);
printf("Thread 1 begin, counter equals %d \n",*cp);
int f=0;
while((*cp)< 10000) {++(*cp);
f++;}
printf("Thread 1 finished, i've incremented %d times \n",f);
pthread_exit(NULL);
}
void *T2 (void * par){
int * cp = (int*)(par);
printf("Thread 2 begin, counter equals %d \n",*cp);
int j=0;
while((*cp)< 10000) {++(*cp);
j++;}
printf("Thread 2 finished, i've incremented %d times \n",j);
pthread_exit(NULL);
}
int main(){
pthread_t idT1, idT2;
int counter = 0;
if (pthread_create(&idT1, NULL, T1, &counter) != 0)
printf("erreur creation");
if (pthread_create(&idT2, NULL, T2, &counter) != 0)
printf("erreur creation");
pthread_join(idT1, NULL);
pthread_join(idT2, NULL);
printf(" Total = %d",counter);
return 0;
}
示例输出:
Thread 1 begin, counter equals 0
Thread 2 begin, counter equals 0
Thread 1 finished, i've incremented 10000 times
Thread 2 finished, i've incremented 8602 times
Total = 10000
【问题讨论】:
标签: c pthreads thread-synchronization