Tôi là người Hàn Quốc và tôi không giỏi tiếng Anh nhưng nếu bạn cho tôi một bình luận ở đó
Tôi sẽ rất hài lòng và sẽ cố gắng hiểu nó.pthread (lỗi phân đoạn)
Tôi đã tạo, ví dụ: 10 chuỗi và cố gắng tham gia sau khi tạo và trả về giá trị.
Nhưng khi tôi tham gia chủ đề cuối cùng, tôi nhận được lỗi phân đoạn.
Kết quả đi ra như thế này ..
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)
khi tôi tạo ra 4 đề nó giống như
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)
tôi dường như không thể tìm thấy lý do tại sao.
#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;
}
Tôi không thể tạo lại điều này, tôi đã thử chủ đề 2 và 4. Nó hoạt động hoàn hảo, ngay cả bên trong Valgrind. Bạn có thể cho chúng tôi biết điều gì khác về vấn đề này không? – VolatileDream
Bạn đã thử một trình gỡ lỗi chưa? gdb là bạn của bạn. – vanza
Chào mừng bạn đến với SO. :-) –