在多线程中"Segmentation fault",在 Linux 中优先级为 c



我正在尝试开发一个程序,其中具有多线程优先级的c在linux中。我的代码在下面。当我运行我的程序,我遇到"分割故障"。我不知道发生了什么。请帮帮我。

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
void *max(void *);
void *avg(void *);
void *min(void *);
int tmp[5];
int main(int argc, char* argv[]){
    pthread_t thread1;
    pthread_t thread2;
    pthread_t thread3;
    pthread_setschedprio(thread1,2);
    int i, j;
    printf("Input number: n");
    for (j=0; j<5; j++) {
        printf("tmp[%d]: ",j);
        scanf("%d: ",&tmp[j]);
    }
    if ((i=pthread_create(&thread1, NULL, max, tmp)) != 0) {
        printf("thread creation failed. %dn", i);
    }
    if ((i=pthread_create(&thread2, NULL, avg, tmp)) != 0) {
        printf("thread creation failed. %dn", i);
    }
    if ((i=pthread_create(&thread3, NULL, min, tmp)) != 0) {
        printf("thread creation failed. %dn", i);
    }
    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);
    pthread_join(thread3, NULL);
    printf("Exiting mainn");
    return 0;
}
void *max(void *arg){
    int i;
    int *arr = (int *)arg;
    int max = arr[0];
    for(i=1;i<5;i++){
        if(max<arr[i]){
            max = arr[i];
        }
    }
    printf("Max of array is: %dn", max);
    sleep(1);
    return NULL;
}
void *avg(void *arg){
    int i;
    int *arr = (int *)arg;
    int sum =0;
    float avg;
    for(i=0;i<5;i++){
        sum = sum + arr[i];
    }
    avg = sum/5.0;
    printf("Average of array is: %fn",avg);
    sleep(1);
    return NULL;
}
void *min(void *arg){
    int i;
    int *arr = (int *)arg;
    int min = arr[0];
    for(i=1;i<5;i++){
        if(min>arr[i]){
            min = arr[i];
        }
    }
    printf("Min of array is: %dn", min);
    sleep(1);
    return NULL;
}

thread1未初始化为有效值时调用pthread_setschedprio(thread1,2);。创建线程后,才能设置线程的优先级。

要清楚,您应该指出注释掉对pthread_setschedprio(thread1,2)的调用是否能够使程序运行而不崩溃。(另外-您真的想在scanf()格式字符串中使用冒号吗?)

这里:

scanf("%d: ",&tmp[j]);

可能是这一行产生的问题,观察:在%d之后,我不认为是这样的地方。

可能这就是原因。

最新更新