小编Nat*_*324的帖子

多线程(C)程序线程未终止

我正在尝试完成一个使用多个线程(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)

c multithreading pthreads

3
推荐指数
1
解决办法
251
查看次数

我输出的第一个字符在C中省略

我似乎无法弄清楚我的输出发生了什么.我正在读取多行用户输入并输出超出下边界的相应输入.出于某种原因,当我输出时,输出的字符串省略了字符串的第一个字符.谁能告诉我为什么会这样?

#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)

c printf scanf

1
推荐指数
1
解决办法
117
查看次数

标签 统计

c ×2

multithreading ×1

printf ×1

pthreads ×1

scanf ×1