मैं कोरियाई हूं और मैं अंग्रेजी में अच्छा नहीं हूं लेकिन अगर आप मुझे नीचे टिप्पणी देते हैं तो
मैं बहुत खुश हूं और इसे समझने की कोशिश करूंगा।pthread (सेगमेंटेशन गलती)
मैं उदाहरण के लिए बनाया है,, 10 धागे और निर्माण के बाद उन्हें शामिल होने और मूल्य वापस करने की कोशिश की।
लेकिन जब मैं अंतिम धागे में शामिल होता हूं, तो मुझे एक सेगमेंटेशन गलती मिलती है।
परिणाम इस तरह बाहर आता है ..
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)
जब मैं 4 धागे बनाने यह है
तरह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)
मैं क्यों खोजने के लिए प्रतीत नहीं कर सकते हैं।
#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;
}
मैं इस पुन: पेश नहीं कर सकता, मैं 2 और 4 धागे की कोशिश की है। यह Valgrind के अंदर भी, बिल्कुल ठीक काम करता है। क्या आप हमें समस्या के बारे में कुछ और बता सकते हैं? – VolatileDream
क्या आपने डीबगर की कोशिश की है? जीडीबी आपका दोस्त है। – vanza
एसओ में आपका स्वागत है। :-) –