我正在尝试完成一个使用多个线程(3)分配4000美元假设奖学金的程序。线程每次处理时,都会“锁定”“关键部分”,并阻止其他线程从总和中取出其块。每次访问时,该线程将占用“奖学金”余额的25%。输出是每个线程获得奖学金后所花费的数量。
到目前为止,我的程序似乎正在处理适当的输出,但是到最后时似乎有问题。每个进程/线程都到达一个不会终止或退出的地步,程序只会停滞不前,无法完成。我感觉线程正在处理但不满足终止条件(奖学金已全部消失)。永远不会到达最后一个函数totalCalc()。是否有人看到我看不到的东西,这可以帮助缓解此问题或使程序完成?
#include <stdio.h>
#include <pthread.h>
#include <math.h>
#define PERCENTAGE 0.25
pthread_mutex_t mutex; // protecting critical section
int scholarship = 4000,
total = 0;
void *A();
void *B();
void *C();
void *totalCalc();
int main(){
pthread_t tid1,
tid2,
tid3;
//pthread_setconcurrency(3);
pthread_create(&tid1, NULL, (void *(*)(void *))A, NULL );
pthread_create(&tid2, NULL, (void *(*)(void *))B, NULL );
pthread_create(&tid3, NULL, (void *(*)(void *))C, NULL );
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
pthread_join(tid3,NULL);
totalCalc();
return 0;
}
void *A(){
float result;
while(scholarship > 0){
sleep(2);
pthread_mutex_lock(&mutex);
result = scholarship * …Run Code Online (Sandbox Code Playgroud) 我似乎无法弄清楚我的输出发生了什么.我正在读取多行用户输入并输出超出下边界的相应输入.出于某种原因,当我输出时,输出的字符串省略了字符串的第一个字符.谁能告诉我为什么会这样?
#include <stdio.h>
typedef struct{
char name[4];
int population;
} state;
enum { MAX_STATES = 10 };
int main()
{
state myStates[MAX_STATES];
int c;
int i = 0;
while ((c = getchar())!= EOF)
{
scanf("%s %d\n", myStates[i].name, &myStates[i].population);
i++;
}
// printf("Last character is [%d]\n", c);
printf("");
if (c <= 0)
{
for(int j = 0; j <= MAX_STATES; j++)
{
if(myStates[j].population >= 10)
printf("%s %d\n", myStates[j].name, myStates[j].population);
else
break;
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输入:
TX 23
CA 45 …Run Code Online (Sandbox Code Playgroud)