मैं एक शौक परियोजना पर काम कर रहा था जहां म्यूटेक्स रहस्यमय तरीके से व्यवहार कर रहे थे। मैंने इसे इस टेस्ट केस में उबाला जो स्पष्ट रूप से डेडलॉक होना चाहिए।lpthread ध्वज के बिना जीसीसी लिंक क्यों करता है?
#include <pthread.h>
#include <stdio.h>
int main() {
pthread_mutex_t test;
pthread_mutex_init(&test, NULL);
pthread_mutex_lock(&test);
pthread_mutex_lock(&test);
printf("Took lock twice\n");
return 0;
}
हालांकि, जब मैं -lpthread
झंडा बिना संकलन, न केवल कार्यक्रम अभी भी संकलित करता है और लिंक, यह भी deadlocking बिना चलाता है। क्यूं कर?
gcc pthread_break.c -o pthread_test -lpthread
./pthread_test
<- deadlocked here
मैं जीसीसी संस्करण 7.2.0 चल रहा हूँ:
gcc pthread_break.c -o pthread_test
./pthread_test
Took lock twice
-lpthread
ध्वज के साथ संकलन की उम्मीद परिणाम अर्जित करता है।
संभावित डुप्लिकेट [pthread stub कार्यों को प्रदान करने के लिए कमजोर प्रतीक द्वारा लागू glibc.so में pthread है?] (Https://stackoverflow.com/questions/21092601/is-pthread-in-glibc-so-implemented-by -weak-symbol-to-provide-pthread-stub-functi) – Lanting
संबंधित उत्तरों लेकिन डुप्लिकेट प्रश्न नहीं। –
आप किस मंच का उपयोग कर रहे हैं? शायद मानक पुस्तकालय में पर्थ्रेड फ़ंक्शंस, या डमी संस्करण होते हैं जो हमेशा "अनुपूरक" त्रुटि की रिपोर्ट करते हैं। क्या आप दृढ़तापूर्वक प्रत्येक निकास कोड की जांच करते हैं और त्रुटियों की रिपोर्ट सावधानी से करते हैं? –