pthread (segmentation fault)

Ich bin Koreanisch und ich bin nicht gut in Englisch, aber wenn du mir einen Kommentar da unten

Ich bin sehr zufrieden und werde versuchen, es zu verstehen.

Die ich erstellt habe, z.B. 10 threads und versucht, sich Ihnen anzuschließen, die nach dem anlegen und geben den Wert zurück.

Aber wenn ich an den letzten thread, bekomme ich einen segmentation fault.

Kommt das Resultat heraus, wie diese..

Before Thread 1 create
After Thread 1 create
Before Thread 0 create
After Thread 0 create
Before Thread 1 join
After Thread 1 join
Before Thread 0 join
Segmentation Fault(core dumped)

wenn ich erstelle 4 threads wie

Before Thread 3 create
After Thread 3 create
Before Thread 2 create
After Thread 2 create
Before Thread 1 create
After Thread 1 create
Before Thread 0 create
After Thread 0 create
Before Thread 3 join
After Thread 3 join
Before Thread 2 join
After Thread 2 join
Before Thread 1 join
After Thread 1 join
Before Thread 0 join
Segmentation Fault(core dumped)

Ich kann nicht scheinen, um herauszufinden, warum.

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

pthread_mutex_t mutex_lock;

struct arg_struct {
        int a;
        int b;
};

void *t_function(void *data) {
        pthread_mutex_lock(&mutex_lock);

        struct arg_struct *arg = (struct arg_struct *)data;
        long int s;

        s = arg->a;

        pthread_mutex_unlock(&mutex_lock);

        return (void **)s;
}

int main()
{
        int i;

        pthread_t p_thread[2];
        int thr_id;
        int status;

        struct arg_struct arg[2];

        for(i = 1; i >= 0; i--) {
                arg[i].a = i;
                arg[i].b = i;
        }

        pthread_mutex_init(&mutex_lock, NULL);

        for(i = 1; i >= 0; i--) {
                printf("Before Thread %d create\n", i);
                thr_id = pthread_create(&p_thread[i],NULL, t_function, (void *)&arg[i]);
                printf("After Thread %d create\n", i);
                usleep(1000);
        }

        int temp[2];

        for(i = 1; i >= 0; i--) {
                printf("Before Thread %d join\n", i);
                pthread_join(p_thread[i], (void**)&status);
                printf("After Thread %d join\n", i);
                temp[i] = status;
        }i

        printf("%d%d", temp[1], temp[0]);

        pthread_mutex_destroy(&mutex_lock);

        return 0;
}
Kann ich nicht reproduzieren, ich habe versucht, 2 und 4 threads. Es funktioniert einwandfrei, auch innerhalb von Valgrind. Können Sie uns etwas über das problem?
Haben Sie versucht, einen debugger? gdb ist dein Freund.
Willkommen ALSO. 🙂

InformationsquelleAutor IKS | 2011-11-05

Schreibe einen Kommentar